3

我有一个实现两个接口A和B的类:

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,但这也不起作用。知道我做错了什么,还是这是不受支持的场景?

4

1 回答 1

2

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

理查德·德明

于 2013-07-10T09:41:41.123 回答