2013-01-22 23 views
2

我有实现两个接口,A和B的类:导出多个接口使用MEF与一个实例作为结果

public class Test 
{ 
    public Test() 
    { 
     Usage<IA> x = new Usage<IA>(); 
     Usage<IB> y = new Usage<IB>(); 
     var b = x.Implementation.Value.Equals(y.Implementation.Value); 
    } 
} 

public interface IA { } 
public interface IB { } 

[Export(typeof(IA))] 
[Export(typeof(IB))] 
public class Impl : IA, IB 
{ 
    public Impl() 
    { 

    } 
} 

public class Usage<T> 
{ 
    public Usage() 
    { 
     CompositionContainer c = new CompositionContainer(new AssemblyCatalog(this.GetType().Assembly)); 
     c.ComposeParts(this); 

     var x = Implementation.Value.ToString(); 
    } 

    [Import] 
    public Lazy<T> Implementation { get; set; } 
} 

我的问题是,这两种性质有自己的impl类的实例。我希望他们指向同一个实例。我试图用CreationPolicy.Shared来完成这个任务,但那也没用。任何想法我做错了,或者这是不支持的情况?

+0

我只是想你的代码,添加'[PartCreationPolicy(CreationPolicy.Shared)]'的'Impl'类,并将其按预期工作; “ImplA”和“ImplB”都被设置为“Impl”的同一个实例。 –

+0

我过度简化了我的问题,因为该示例实际上工作(即使没有PartCreationPolicy)。我用代表实际情况的东西改变了示例代码。 –

+2

问题是,您正在为'Usage'类的每个实例使用不同的'CompositionContainer'。导出的实例不会在不同的容器之间共享。 –

回答

1

问题是,您正在为Usage类的每个实例使用不同的CompositionContainer。导出的实例不会在不同的容器之间共享。

理查德推定