1
[Export]
[Export(typeof(IClass))
public Class : IClass
当我使用Class和IClass的构造函数注入时,我可以期待同样的单例吗?在mef中输出两次指向相同的对象
[Export]
[Export(typeof(IClass))
public Class : IClass
当我使用Class和IClass的构造函数注入时,我可以期待同样的单例吗?在mef中输出两次指向相同的对象
是,不管出口的数量,所述CreationPolicy.Shared
每类型指定,这意味着作为Export
和Export(typeof(IClass))
实际运行时类型得到的。你可以看到这个例子:
public interface IMyClass
{
string Name { get; set; }
}
[Export]
[Export(typeof(IMyClass))]
public class MyClass : IMyClass
{
private static int count;
public MyClass()
{
count++;
Name = "Instance " + count;
}
public string Name { get; set; }
}
var container = new CompositionContainer(
new AssemblyCatalog(Assembly.GetExecutingAssembly()));
var instance1 = container.GetExportedValue<MyClass>();
var instance2 = container.GetExportedValue<IMyClass>();
// should be true.
bool referenceEquals = object.ReferenceEquals(instance1, instance2);
// should also be true.
bool nameEquals = instance1.Name == instance2.Name;