5

インターフェイスを実装するアセンブリを実行時にロードするコンソールアプリを構築しようとしています。重要なのは、.dllを変更することで変更できる命令を使用して.dllを作成することです。

私のVS2012ソリューションは、インターフェイス、それを実装するライブラリ、コンソールアプリの3つのプロジェクトで構成されています。(このため、3つすべてに独自の名前空間がありますが、これは問題になる可能性がありますか?)ライブラリとコンソールアプリの両方に、インターフェイスプロジェクトへの参照があります。

にアセンブリを追加した後、をObjectFactory使用するとアセンブリが見つかりませんGetAllInstances。を使用すると見つかりますAssembliesFromPathが、追加は機能しないようです。

これが私のコードです:

var dir = "..\\..\\..\\ComputeLibrary\\bin\\Debug";
ObjectFactory.Initialize(cfg =>
{
    cfg.Scan(scanner =>
    {
        scanner.AssembliesFromPath(dir);
        scanner.AddAllTypesOf(typeof(ICompute)).NameBy(i => i.Name);
    });
});
var list = ObjectFactory.GetAllInstances<ICompute>().ToList();
list.ForEach(item => item.Test());

誰かがソリューション全体を見たい場合は、ここから入手できます。

私はおそらくここで何か間違ったことをしているのですが、それが何であるかを見つけることができないようです。これはどのように使用されることになっていますか?それとも、このようなことをするためにMEFに目を向けるべきですか?

4

1 に答える 1

3

Structuremap Google グループのこのスレッドを思い出すまで、これはしばらくの間私を困惑させました。

アプリケーションを実行すると、ComputeInterface.dll アセンブリが読み込まれます。ComputeLibrary フォルダーをスキャンすると、同じアセンブリが再度読み込まれます。インターフェイスは 1 つのアセンブリからしか実装できないため、構造マップが混乱します。ComputeLibrary\bin\Debug フォルダーから ComputeInterface.dll を削除してみてください。

于 2013-03-07T20:52:05.987 に答える