使用 MEF 按命名空间解析导入

发布于 2024-11-13 06:24:18 字数 149 浏览 2 评论 0原文

我使用 MEF 作为 IoC 容器。

如果请求类位于 Foo.UI.* 命名空间中,我希望 ILogger 解析为 ClientLogger,否则它应该解析为 Logger。我可以这样做吗?

I'm using MEF as an IoC container.

If the requesting class is in the Foo.UI.* namespace, I want ILogger to resolve to ClientLogger, otherwise it should resolve to Logger. Can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

揽清风入怀 2024-11-20 06:24:18

也许有这样的解决方法,使用命名导出?

[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)

我知道这不是最好的解决方案,但也许它会起作用。

Maybe with such a workaround, using named exports ?

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

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

And the requesting type in the Foo.UI.* decorate like this

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

I know that it's not the best solution but maybe it would work.

时光倒影 2024-11-20 06:24:18

Thomas 使用命名导出的解决方案可能是您可以使用 .NET 4 版本的 MEF 实现的最佳解决方案。在下一版本的 MEF 中,您可以通过 RegistrationBuilder 将 UI 命名空间中的任何 ILogger 导入更改为命名导入。 IE,有效地按照托马斯的建议进行,但按照惯例进行,而不是必须将其应用到每个类中。

您可以在 codeplex 上获取下一版本 MEF 的预览。

Thomas's solution using named exports is probably the best you can do with the .NET 4 version of MEF. With next version of MEF, you can probably use a convention via the RegistrationBuilder to change any ILogger imports in the UI namespace to be named imports. IE, effectively doing what Thomas suggested but doing it by convention instead of having to apply it to each of your classes.

A preview of the next version of MEF is available on codeplex.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文