Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置正确的MEF配置?_C#_.net 4.0_Mef - Fatal编程技术网

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
,并将适当的配置对象分配给
IConfiguration

MEF设计用于对象实例,不是吗调用
container.ComposeParts(typeof(ConfigurationSystem))
将毫无用处,因为这里基本上要求MEF为传递给它的
Type
对象组成部分,这显然不是您想要的


虽然有一个简单的解决方案,但它不会导致您对应用程序的体系结构进行太多的更改。您可以将
ConfigurationSystem
类设置为单例,然后可以调用
container.ComposeParts(此)
并获取您的部件。

问题是
ConfigurationSystem
不是用平均值编写的,它被标记为密封的,所以我应该将MEF设置代码移到
ConfigurationSystem
之外的其他地方吗?我使用的引导类可以是执行所有MEF合成工作的单例。@Xaisoft从您的问题中了解到,您不能修改
配置系统
。如果
导入
定义位于
配置系统
,并且必须保持静态,则您不能让MEF为您设置该值。但如果是这样的话,为什么首先要使用
导入
来编写它?@AdiLester-它是这样的t.我正在寻找一个放置MEF的地方,而这发生在应用程序初始化的地方。