首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MEF (Managed Extensibility Framework,托管扩展框架)可以进行“鸭子”类型吗?

MEF (Managed Extensibility Framework,托管扩展框架)可以进行“鸭子”类型吗?
EN

Stack Overflow用户
提问于 2009-07-17 00:29:57
回答 2查看 668关注 0票数 6

我有两个程序集:

部件1:

代码语言:javascript
复制
interface IWeapon {
    int Might { get; }
}

[Export("sword")]
public class Sword : IWeapon {

    public int Might {
        get { return 10; }
    }
}

组件2:

代码语言:javascript
复制
interface IWeapon {
    int Might { get; }
}

var catalog = new AssemblyCatalog(typeof(Ninja.Sword).Assembly);
var container = new CompositionContainer(catalog);
// not allowed to use the IWeapon def in assembly 2 
var sword = container.GetExportedValue<IWeapon>("sword");

我知道怎么让它起作用。我可以向MEF (Managed Extensibility Framework)请求对象,或者让它导出正确的IWeapon,而不仅仅是按名称导出对象。

如果所有的接口点都实现了,那么MEF是否可以为我执行“鸭子”类型并返回一个代理对象?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-17 00:36:55

我认为它在MEF的早期版本中就有(通过为类动态发出IL并返回它),现在它被删除了。这真的说不通。毕竟,您的类应该设计为通过特定接口实现该加载项功能。如果你能给它们添加像Export属性这样的东西,你也应该能够很好地在你的类上实现接口。

票数 5
EN

Stack Overflow用户

发布于 2012-04-15 04:20:04

如果你的两个IWeapon类都有相同的COM Guid,那么你可以在MEF 4中使用类型等价来接近鸭子类型。它对于.NET插件的版本控制和升级支持真的很好,比如有一个v2契约,它也可以加载只实现v1的插件。这里有一篇关于这个主题的好文章。

http://blogs.msdn.com/b/delay/archive/2011/03/09/mef-addict-combining-net-4-s-type-embedding-and-mef-to-enable-a-smooth-upgrade-story-for-applications-and-their-extensions.aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1140983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档