1

私のプロジェクトの 1 つで MEF と共に Caliburn.Micro を使用しています。ルート ビューモデルでインポートを取得できます。しかし、他のクラスへのインポートを取得したい場合、それは機能しません。例えば:

[Export]
public class A
{
    [Import]
    static ILogger logger;

    public static void SomeMethod()
    {
        logger.Log("foobar");
    }
}

と...

[Export(typeof(ILogger))]
public class FileLogger : ILogger
{
    public void Log()
    {
        //some implementations
    }
}

アプリケーションを実行すると、ロガーが設定されないか、null に等しくなります。

奇妙なことに、次のようにルート ビューモデルにインポートを追加し、そこにブレークポイントを設定すると、何とか機能します。

[Import]
public ILogger logger {get; set;}

しかし、F5を押して続行すると、クラスAになるとloggerがnullになることがわかりました.loggerの値がなぜnullに設定されているのか、どの場所にあるのか疑問に思っています。

4

1 に答える 1

1

CompositionContainerオブジェクトのインポートを構成または満たすには、 を使用する必要があります。

A a = new A();
compositionContainer.ComposeParts(a);

それ以外の場合は、いずれかのCompositionContainer.GetExportXXXX方法を使用できます。このようにして、MEF がオブジェクトを作成して構成します。

于 2013-04-21T22:07:03.127 に答える