3

私は、1 つのプロパティを持つインターフェイスである 1 つのクラスが呼び出されたクラス ライブラリを持っていIConfigurationます。

which implements と呼ばれるクラス ライブラリと、TexasConfigurationwhich implementsIConfigurationと呼ばれる別のクラス ライブラリがFloridaConfigurationありますIConfiguration

と飾ってTexasConfigurationありますFloridaConfiguration[Export(typeof(IConfiguration)]

と呼ばれるシールされたクラスである別のクラスがありConfigurationSystem、それには次のように定義されたプライベートコンストラクターが含まれていますprivate ConfigurationSystem() {}

私が抱えている問題はほとんどありません。一般的に言えば、MEF をセットアップするにはどこに配置すればよいでしょうか。ConfigurationSystem現在、次の宣言とともに静的メソッドを入れています。

[Import(typeof(IConfiguration)]
IConfiguration configuration {get; set;}

上記では、configuration未使用であることがわかります。この場合、これは正常ですか。

で静的メソッドも作成しましたが、静的にすると、ConfigurationSystem渡すことができず、渡す必要があります。thistypeof(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れると、my を呼び出してSetupConfiguration適切な構成オブジェクトを に割り当てる静的メソッドが呼び出されIConfigurationます。

4

1 に答える 1

1

MEF は、静的クラスではなく、オブジェクト インスタンスで動作するように設計されています。container.ComposeParts(typeof(ConfigurationSystem))基本的にここで求めているのは、Type渡したオブジェクトのパーツを MEF が構成することであり、これは明らかに望んでいたものではないため、の呼び出しはまったく何もしません。

ただし、アプリケーションのアーキテクチャをあまり変更しない簡単な解決策があります。ConfigurationSystemクラスをシングルトンにすると、パーツを呼び出して取得できるようになりますcontainer.ComposeParts(this)

于 2012-10-19T18:46:25.000 に答える