C# 如何设置正确的MEF配置?
我有一个类库,其中有一个名为C# 如何设置正确的MEF配置?,c#,.net-4.0,mef,C#,.net 4.0,Mef,我有一个类库,其中有一个名为IConfiguration的类,它是一个只有一个属性的接口 我有一个名为TexasConfiguration的类库,它实现了IConfiguration,还有一个名为FloridaConfiguration的类库,它实现了IConfiguration 我用[Export(typeof(IConfiguration)] 我有另一个类,它是名为ConfigurationSystem的密封类,它包含一个定义为private ConfigurationSystem(){}
IConfiguration
的类,它是一个只有一个属性的接口
我有一个名为TexasConfiguration
的类库,它实现了IConfiguration
,还有一个名为FloridaConfiguration
的类库,它实现了IConfiguration
我用[Export(typeof(IConfiguration)]
我有另一个类,它是名为ConfigurationSystem
的密封类,它包含一个定义为private ConfigurationSystem(){}
我有几个问题。一般来说,我应该把MEF的东西放在哪里设置它。目前,我在ConfigurationSystem
中放置了一个静态方法,并声明如下:
[Import(typeof(IConfiguration)]
IConfiguration configuration {get; set;}
在上面,它告诉我,配置
未使用。这种情况正常吗
我还在ConfigurationSystem
中创建了一个静态方法,但是如果我将其设置为静态,我无法将此
传递给它,我必须将类型(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
,并将适当的配置对象分配给IConfigurationMEF设计用于对象实例,不是吗调用container.ComposeParts(typeof(ConfigurationSystem))
将毫无用处,因为这里基本上要求MEF为传递给它的Type
对象组成部分,这显然不是您想要的
虽然有一个简单的解决方案,但它不会导致您对应用程序的体系结构进行太多的更改。您可以将ConfigurationSystem
类设置为单例,然后可以调用container.ComposeParts(此)
并获取您的部件。问题是ConfigurationSystem
不是用平均值编写的,它被标记为密封的,所以我应该将MEF设置代码移到ConfigurationSystem
之外的其他地方吗?我使用的引导类可以是执行所有MEF合成工作的单例。@Xaisoft从您的问题中了解到,您不能修改配置系统
。如果导入
定义位于配置系统
,并且必须保持静态,则您不能让MEF为您设置该值。但如果是这样的话,为什么首先要使用导入
来编写它?@AdiLester-它是这样的t.我正在寻找一个放置MEF的地方,而这发生在应用程序初始化的地方。