MEF 和 WPF 自定义导入定义

发布于 2024-11-09 19:46:37 字数 400 浏览 0 评论 0原文

我有这个想法尝试使用自定义 IMPORT 属性来根据条件新建一个类。例如,如果我有:

[Import("Position_32")] 如果我运行的是 32 位操作系统,则应该存在,然后:

[Import("Position_64")] 如果我运行 64 位操作系统。有什么方法可以根据条件使属性的类型名称动态化吗?

从概念上讲,它可能如下所示:

[Import(((IsWIN64()) ? "Position_64" : "Position_32"))] 这不起作用,因为类型名称需要是常量。

我想让适当职位类别的更新尽可能透明。我的意思是我使用 funcs 做了一个基于工厂的方法来获得我想要的效果,但我很想使用 MEF 来实现这一点。有想法吗?

非常感谢,

大卫

I have this idea to try to use a custom IMPORT attribute to new up a class based on a condition. For example, if I have:

[Import("Position_32")] this should exist if I'm running a 32bit OS, and then:

[Import("Position_64")] if Im running a 64 bit OS. Is there any way to make the type name for the attribute dynamic based on a condition?

Conceptually it could look like this:

[Import(((IsWIN64()) ? "Position_64" : "Position_32"))] This doesn't work because the type name needs to be a constant.

I want to make the newing up of the proper position class as transparent as possible. I mean I did a factory based method using funcs to get my desired effect but I'd love to use MEF for this. Ideas?

THanks much,

David

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

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

发布评论

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

评论(1

草莓酥 2024-11-16 19:46:37

您可以像这样使用 ExportMetadataAttribute

[Import("Position")]
[ExportMetadata("Platform", "32bit")]
public YourType ...

然后,当您导入时,请使用:

 [ImportMany]
 public Lazy<YourType,IDictionary<string,object>>[] Positions { get; set; }

然后您可以检查字典中是否有适当的元数据,并在运行时使用该特定平台。

此外,您可以为强类型元数据(而不是字符串)创建自定义接口。有关详细信息,请参阅导出和元数据

You could use ExportMetadataAttribute like so:

[Import("Position")]
[ExportMetadata("Platform", "32bit")]
public YourType ...

Then, when you go to import, use:

 [ImportMany]
 public Lazy<YourType,IDictionary<string,object>>[] Positions { get; set; }

You can then check the Dictionary for the appropriate metadata, and use that specific platform, at runtime.

In addition, you can make a custom interface for strongly typed metadata (instead of strings). For details, see Exports and Metadata.

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