Несколько экземпляров одной MEF DLL - PullRequest
7 голосов
/ 21 мая 2010

Очевидно, что .NET 4.0 не имеет PartCreator / ExportFactory для не-SL. Что, мне кажется, мне нужно для этого.

Мне было интересно, может ли кто-нибудь помочь мне (с примером, пожалуйста), как создать несколько экземпляров типа EXPORTED в DLL. В основном говорят, что у меня есть DLL, которая содержит тип ConsoleLogger, и он использует интерфейс ILogger (который я импортирую / экспортирую через MEF) ... Как мне создать экземпляр ConsoleLogger всякий раз, когда я хотел? Кроме того ... Это вообще возможно?

Ответы [ 2 ]

8 голосов
/ 21 мая 2010

Один из способов сделать это - самостоятельно создать фабрику для регистратора и использовать ее в качестве экспортируемого контракта.

public class Logger : ILogger
{
    public Logger(IFoo foo) { }
    // ...
}

[Export(typeof(ILoggerFactory))]
public class LoggerFactory : ILoggerFactory
{
    [Import]
    public IFoo Foo { get; set; }

    public ILogger CreateLogger()
    {
        return new Logger(Foo);
    }
}

Затем вы просто импортируете LoggerFactory и каждый раз вызываете CreateLogger, когда вам нужен регистратор. Это почти то же самое, что вы сделали бы, если бы вы импортировали ExportFactory. Недостатком является то, что вам нужно написать отдельную фабрику для каждой вещи, для которой вы хотите иметь возможность создавать несколько экземпляров.

Другим вариантом является добавление ExportProvider в ваш контейнер, который позволяет импортировать фабрики. В последнем сбрасывании MEF на CodePlex имеется образец DynamicInstantiation, который показывает, как это сделать.

0 голосов
/ 23 июля 2010

MEF 2 Preview 1 переносит ExportFactory в .NET 3.5 и 4.0:

  • ExportFactory перемещено из SL в .net
  • настольная версия Некоторый код
  • Рефакторинг и улучшения
  • Кодовые контракты Обе сборки имеют
  • со строгим именем со знаком
...