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
来完成这个任务,但那也没用。任何想法我做错了,或者这是不支持的情况?
我只是想你的代码,添加'[PartCreationPolicy(CreationPolicy.Shared)]'的'Impl'类,并将其按预期工作; “ImplA”和“ImplB”都被设置为“Impl”的同一个实例。 –
我过度简化了我的问题,因为该示例实际上工作(即使没有PartCreationPolicy)。我用代表实际情况的东西改变了示例代码。 –
问题是,您正在为'Usage'类的每个实例使用不同的'CompositionContainer'。导出的实例不会在不同的容器之间共享。 –