私は最終的にIoCやその他のパターンについて学習するプロセスに没頭しており、アセンブリのリストに基づいてオープンジェネリックスを登録しようとすると問題に遭遇しました。フレームワークのコアを別のクラスライブラリに構築し、フレームワークから継承するいくつかのテストクラスを宣言する一連のテストプロジェクトを用意しています。シンプルなインジェクタとアセンブリスキャン
問題は、ICommandHandler<>
オープンジェネリックが何も見つけられないように、実行時にAddPersonCommandHandler : ICommandHandler<AddPersonCommand>
がロードされないframework.test.service dllです。 AddPersonCommandHandler
インスタンスを事前に作成してから、リストに追加アセンブリを1つ作成してから動作させる必要があります。
ロードを強制する簡単な方法はありますか?
=========== 編集: これは、アプリケーションドメインと他のアセンブリへの参照を保持するユニットテストプロジェクトのワイヤーアップコードです。
public Container SetupIoc()
{
var container = new Container();
container.Register(typeof(IUnitOfWork), typeof(EntityFrameworkUnitOfWork), Lifestyle.Singleton);
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
container.Register(typeof(ICommandHandler<>), assemblies);
container.Verify();
return container;
}
IUnitOfWork
ICommandHandler<>
はTest.Service.dllであるCore.dll
AddPersonCommandHandler
である - 一緒に真の解決策を置く模倣プロジェクトの設定アップ構造のスイートの一部と参照ユニットテストによって。
UnitOfWork
を直接指定しているので、ユニットまたは作業登録が正常に機能しているというのは、ICommandHandler
インターフェイスが正常にバインドされているコアにあるのに対して、直接起こります。 Post Verify()私はcontainer
に仕事単位の登録のみを表示します。 Test.Service.dllの読み込みを取得するには、AddPersonCommandHandler
が表示されます。をTestInitメソッドでインスタンス化できます。
プロジェクトのすべてのDLLを手動でロードする必要があるのはちょっと気になるようです。また、DLLの実行フォルダをスキャンすると、すでに読み込まれているものもあります...読み込みがうまくいくか、既にロードされているかどうか調べるために慎重にチェックする必要がありますか?
使用しているフレームワークによっては、型を明示的に登録/ロードするためのテキストベースの設定が可能です。あるいは、Assembly.Load()で手動で行うこともできます(アセンブリ参照を追加しても、 )。今私は、しかし、私は完全に質問を理解するか分からない。 – Lucero
私は他の決議を見てきましたので、研究を行っています。私が知りたかったのは、アセンブリをスキャンしてロードする必要があったかどうかでした。 –
登録を行い、どのプラットフォームが使用されているか、mvc、wpf、windowsサービスなどを示すコードを表示できますか? –