繁体   English   中英

如何设置正确的MEF配置?

[英]How to setup the proper MEF configuration?

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

我有一个名为类库TexasConfiguration它实现IConfiguration ,并呼吁其他类库FloridaConfiguration它实现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 ,我想调用我的SetupConfiguration并将相应的配置对象分配给IConfiguration

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

有一个简单的解决方案,但不会导致您过多地更改应用程序的体系结构。 您可以使ConfigurationSystem类成为单例,然后您就可以调用container.ComposeParts(this)并获取您的部件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM