MEF для композиции со статическими свойствами - PullRequest
2 голосов
/ 07 марта 2012

Можно ли использовать композицию MEF со статическими свойствами?

Обычно я делаю

MyClass obj = new MyClass();
MEFHelper.Compose(obj);

и

public class MEFHelper
{
    //....
    public static void Compose(object o)
    {
        var batch = new CompositionBatch();
        batch.AddPart(o);
        _container.Compose(batch);
    }
}

Но это работает только с объектами экземпляра. Любое предложение?

Спасибо

1 Ответ

6 голосов
/ 07 марта 2012

Я бы поставил под сомнение вашу необходимость использовать статические свойства вместо свойств экземпляра. Контейнер спроектирован таким образом, чтобы автоматически удалять экземпляры, чего, разумеется, он не может делать, когда вы используете статические свойства, так как время жизни и использование этих свойств не определены.

Если вы действительно хотите составить статическое свойство, вам, вероятно, потребуется выполнить импорт самого свойства, например ::

public static class SomeStaticClass
{
    public static SomeObject Instance { get; private set; }
}

SomeStaticClass.Instance = container.GetExportedValue<SomeObject>();

или

SomeStaticClass.Instance = new SomeObject();
container.SatisfyImportsOnce(SomeStaticClass.Instance);

Реально, я бы обратился к вашему дизайну вашего статического типа, чтобы посмотреть, сможете ли вы реализовать его как тип экземпляра.

...