私はインターフェイスを実装する実行時にアセンブリをロードするコンソールアプリケーションを構築しようとしています。要点は、.dllを変更することによって変更できる命令で.dllを作成することです。StructureMap: 'AddAllTypesOf'がObjectFactoryにアセンブリを追加していませんか?
私の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());
は、ソリューション全体を見てみたい、それがhere可能です。
私はおそらくここで何か間違っていますが、私はそれが何であるかを見つけることができません。 これはどのように使用されるのでしょうか?あるいは、私はこのようなことをしてMEFに目を向けるべきですか?
文書によると、あなたのコードは、期待されるものと一致しているようです。これをデバッガでブレークポイントで実行し、 'scanner.AssembliesFromPath(dir);'行が実行された後にスキャナインスタンスが予期されたアセンブリを持つことを確認しましたか? – cfeduke
はい、その行を実行した後、スキャナには2つのアセンブリが含まれています。その前にはインターフェイスとライブラリは0です。[screenshot](http://i.imgur.com/Z0znR0Y.png) – Yves
'.NameBy'を削除しますか?私は、クラスがスキャナに追加されるのを妨げている例外が飲み込まれているかどうか疑問に思っています。 – cfeduke