Microsoft Unity 2.1 IoC コンテナーを使用しています。これは、Windsor や StructureMap のような自動 / 規則ベースの構成を備えていないため、 NuGet 経由でUnityConfiguration 1.4.1 ( http://thedersen.com/projects/unityconfiguration/を参照) をダウンロードしました。
構成は、UnityRegistries (他のコンテナー内のインストーラーやモジュールと同様) を作成することによって実行されます。さまざまなタイプのクラスを登録するために、これらをいくつか作成しました。
internal class WidgetRegistry : UnityRegistry
{
public WidgetRegistry()
{
Register<IWidget, Widget>();
}
}
internal class GubbinsRegistry : UnityRegistry
{
public GubbinsRegistry()
{
Register<IGubbins, FirstGubbins>().WithName("gubbins1");
Register<IGubbins, SecondGubbins>().WithName("gubbins2");
}
}
コンポジション ルートでは、以下を追加できます。
container.Configure(
unityRegistry =>
{
unityRegistry.AddRegistry<WidgetRegistry>();
unityRegistry.AddRegistry<GubbinsRegistry>();
});
...そして、すべてが正常に動作します。ただし、これは、新しいレジストリを追加するたびに、コンポジションのルート コードを手動で変更することを意味します。私がやりたいことは、UnityConfiguration のスキャン機能を使用して、これを自動的に行うことです。つまり、上記の AddRegistry() への呼び出しを削除し、次のように置き換えます。
container.Configure(
unityRegistry =>
{
unityRegistry.Scan(
scanner =>
{
scanner.AssembliesInBaseDirectory();
scanner.ForRegistries();
});
});
残念ながら、これはまったく機能しません。WidgetRegistry および GubbinsRegistry コンストラクターは呼び出されません。
UnityConfiguration のこの機能を正しく使用していないと思われます。これを行う方法はありますか?
どうもありがとう、
マット