【发布时间】:2010-08-04 22:06:41
【问题描述】:
我试图弄清楚为什么我的一个对象似乎不满足其导入。我认为这可能是我使用 container.ComposeParts() 函数的方式,但我找不到太多关于它的文档。
我有四个项目
MEF.Service.Contracts
MEF.Service.Messaging(实施合同)
MEF.Service.Core
MEF.Service.Console
MEF.Service.Contracts 包含一个名为 IMessageService 的简单接口,具有一个功能
public interface IMessageService
{
void SendMessage(string message);
}
MEF.Service.Messaging 有上述的一种实现
[Export(typeof(IMessageService))]
public class ConsoleMessageService : IMessageService
{
#region IMessageService Members
public void SendMessage(string message)
{
Console.WriteLine(message);
}
#endregion
}
MEF.Service.Core 有一个名为 ServiceManager 的类,用于导入可用的服务。在这个例子中,IMessageService
public class ServiceManager
{
[Import]
public IMessageService MessageService { get; set; }
}
最后,在 MEF.Service.Console 应用程序项目中,我正在使用 DirectoryCatalog 创建 MEF 容器。然后我创建一个 ServiceManager 实例并调用它的 MessageService 属性。
但是,此时它会因对象引用错误而失败。
这是 MEF.Service.Console 项目中的代码
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.Run();
}
public void Run()
{
Compose();
ServiceManager manager = new ServiceManager();
manager.MessageService.SendMessage("Test Message");
Console.ReadLine();
}
private void Compose()
{
var catalog = new DirectoryCatalog(@".\");
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
}
MEF.Service.Console 引用其他三个项目只是为了确保 dll 在运行时位于同一文件夹中。
我已经检查了初始化后的目录和容器,它确实包含我的 ConsoleMessageService 导出作为一部分。
我试图弄清楚为什么我的 ServiceManager 中的 [Import] MessageService 不满意。
任何关于组成部分以及如何满足 Imports 的帮助或指示将不胜感激。
【问题讨论】:
标签: mef