3

我有一个类库,其中一个名为的类IConfiguration是一个只有一个属性的接口。

我有一个名为 which implements 的类库TexasConfigurationIConfiguration另一个名为FloridaConfigurationwhich implements的类库IConfiguration

我已经装饰TexasConfigurationFloridaConfiguration[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,我想在其中调用 mySetupConfiguration并将适当的配置对象分配给IConfiguration.

4

1 回答 1

1

MEF 旨在处理对象实例,而不是静态类。调用container.ComposeParts(typeof(ConfigurationSystem))绝对不会做任何事情,因为您在这里基本上要求的是 MEF 为Type您传递给它的对象组成部分,这显然不是您想要的。

有一个简单的解决方案,但不会导致您过多地更改应用程序的架构。你可以让你的ConfigurationSystem班级成为单身人士,然后你就可以打电话container.ComposeParts(this)并得到你的零件。

于 2012-10-19T18:46:25.000 回答