Разрешение импорта по пространству имен с помощью MEF - PullRequest
2 голосов
/ 01 июня 2011

Я использую MEF в качестве контейнера IoC.

Если запрашивающий класс находится в пространстве имен Foo.UI. *, я хочу, чтобы ILogger разрешился в ClientLogger, в противном случае он должен разрешиться вLogger.Могу ли я сделать это?

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Может быть, с таким обходным путем, используя именованный экспорт?

[Export("clientLogger", typeof(ILogger))]
public class ClientLogger : ILogger {}

[Export("logger", typeof(ILogger))]
public class logger: ILogger {}

И запрашивающий тип в Foo.UI. * декорировать так

[ImportingConstructor]
public MyService([Import("clientLogger", typeof(ILogger))]ILogger logger)

Я знаю, что это не лучшее решение, но, возможно, оно сработает.

1 голос
/ 01 июня 2011

Решение Томаса, использующее именованные экспорты, вероятно, лучшее, что вы можете сделать с MEF-версией .NET 4. В следующей версии MEF вы, вероятно, сможете использовать соглашение через RegistrationBuilder , чтобы изменить любые импорты ILogger в пространстве имен пользовательского интерфейса, чтобы они назывались import. То есть, эффективно делал то, что предлагал Томас, но делал это по соглашению, вместо того, чтобы применять его к каждому из ваших классов.

Предварительный просмотр следующей версии MEF доступен на codeplex .

...