действительно ли экспорт два раза в mef указывает на один и тот же объект - PullRequest
1 голос
/ 18 марта 2011
[Export]
[Export(typeof(IClass))
public Class : IClass

Можно ли ожидать того же синглтона, когда я использую конструктор для классов и классов?

1 Ответ

4 голосов
/ 18 марта 2011

Да, независимо от количества экспортов, для каждого типа указывается 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;
...