首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MEF遇到麻烦

MEF遇到麻烦
EN

Stack Overflow用户
提问于 2012-06-03 12:24:21
回答 1查看 1.1K关注 0票数 0

我试图在.NET 4中创建一个可扩展的“实用程序”控制台应用程序,我认为使用MEF这样做会给我带来最好的灵活性和可扩展性。

因此,我开始设置MEF 接口:

代码语言:javascript
复制
public interface IUtility
{
    string Title { get; }
    string Version { get; }

    void Execute(UtilContext context);
}

然后,我创建了两个几乎相同的测试插件--看看这些插件是如何工作的:

MEF:

代码语言:javascript
复制
[Export(typeof(IUtility))]
public class Utility1 : IUtility
{
    public string Title
    {
        get { return "Utility 1"; }
    }

    public string Version
    {
        get { return "1.0.0.0"; }
    }

    public void Execute(UtilContext context)
    {
    }
}

充当MEF插件“主机”的控制台应用程序如下所示:

代码语言:javascript
复制
[ImportMany]
public IEnumerable<IUtility> _utilities { get; set; }

public void SetupMEF()
{ 
   string directory = ConfigurationManager.AppSettings["Path"];

   AggregateCatalog catalog = new AggregateCatalog();
   catalog.Catalogs.Add(new DirectoryCatalog(directory));

   CompositionContainer container = new CompositionContainer(catalog);
   container.ComposeParts(this);
}

我检查了--目录正在从app.config中正确读取,在构建解决方案之后,插件模块(*.dll文件)就在那里出现了。一切似乎都很好.直到我得到这个例外:

System.Reflection.ReflectionTypeLoadException未被处理

Message =无法加载一个或多个请求类型。检索LoaderExceptions属性以获得更多信息。

LoaderException:

在程序集‘get_Version,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null’中键入'Utility.Utility1‘的’Utility.Utility1‘方法没有实现

嗯……MEF到底想告诉我什么?我该怎么解决这个问题?有什么想法,想法,建议吗?

我是否打破了某些约定,拥有一个名为Version的属性?这是MEF预订的东西吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-03 12:39:55

抱歉,伙计们-我的错。在"plugin“目录中徘徊着一个非常古老的*.dll,它实际上没有任何实现该属性的Get方法。

*.dll解决了我的问题。我现在确实可以加载我的插件了,它们可以没有任何问题地拥有一个名为Version的属性。

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

https://stackoverflow.com/questions/10870285

复制
相关文章

相似问题

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