向MEF进口公开“服务”

时间:2012-01-16 10:45:19

标签: mef

在MEF中导入零件很容易。

[ImportMany(typeof(IModule))]
public List<IModule> Modules {get; set;}

但是shell应用程序需要能够为这些部分提供一些服务。

例如,shell应用程序可以访问数据层,了解身份验证和授权等...

是否有一个简单的解决方案。 (也许这真是一个明智的选择?)任何最佳实践?

1 个答案:

答案 0 :(得分:2)

为什么不导出这些服务?

[Export(typeof(IMyService))]
public class MyService : IMyService
{
    ...
}

如果服务绑定到shell并且shell负责配置它,那么您可以将其导出为shell属性;在这种情况下,您需要从MyService类中删除导出属性并具有以下内容:

public class Shell : Window
{
    [Export]
    public IMyService MyService
    {
        get
        {
            MyService service = new MyService();

            // initialize service

            return service;
        }
    }
}

然后每个部分都可以导入和使用它们。

[ModuleExport(typeof(MyModule))]
public class MyModule : IModule
{
    [Import]
    public IMyService MyService { get; set; }
}

通过这种方式,您可以知道shell在导入时配置了该服务。