[英]How to setup the proper MEF configuration?
我有一个类库,其中有一个名为IConfiguration
类,它只是一个属性的接口。
我有一个名为类库TexasConfiguration
它实现IConfiguration
,并呼吁其他类库FloridaConfiguration
它实现IConfiguration
。
我已经装饰TexasConfiguration
和FloridaConfiguration
与[Export(typeof(IConfiguration)]
我有一个名为ConfigurationSystem
密封类,它包含一个私有构造函数,定义为private ConfigurationSystem() {}
我有几个问题。 一般来说,我应该把MEF的东西放在哪里设置它。 目前,我在ConfigurationSystem
添加了一个静态方法以及以下声明:
[Import(typeof(IConfiguration)]
IConfiguration configuration {get; set;}
在上面,它告诉我configuration
未使用。 在这种情况下这是正常的吗?
我也创造了一个静态方法ConfigurationSystem
,但如果我让静态的,我不能通过this
吧,我要传递typeof(ConfigurationSystem)
它:
public static void SetupConfiguration()
{
using (DirectoryCatalog catalog = new DirectoryCatalog(@"c:\\developement\source\configuration"))
{
CompositionContainer container = new CompositionContainer(catalog);
container.ComposeParts(typeof(ConfigurationSystem));
}
}
我希望能够做到这样的事情:
ConfigurationSystem.SetupConfiguration();
但除非声明方法是静态的,否则我不能这样做。 简而言之,当应用程序启动时,它会调用静态方法Initialize
,我想调用我的SetupConfiguration
并将相应的配置对象分配给IConfiguration
。
MEF旨在处理对象实例,而不是静态类。 对container.ComposeParts(typeof(ConfigurationSystem))
的调用绝对不会做任何事情,因为你在这里基本上要求的是MEF为你传递给它的Type
对象组成部分,这显然不是你想要的。
有一个简单的解决方案,但不会导致您过多地更改应用程序的体系结构。 您可以使ConfigurationSystem
类成为单例,然后您就可以调用container.ComposeParts(this)
并获取您的部件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.