我有一个名为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
。
答案 0 :(得分:1)
MEF旨在使用对象实例,而不是静态类。对container.ComposeParts(typeof(ConfigurationSystem))
的调用绝对没有任何意义,因为你在这里基本上要求MEF为你传递给它的Type
对象组成部分,这显然不是你想要的。 / p>
虽然有一个简单的解决方案,但不会导致您过多地更改应用程序的体系结构。您可以将ConfigurationSystem
课程设为单身,然后您就可以致电container.ComposeParts(this)
并获取您的部分。