0

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 のこの機能を正しく使用していないと思われます。これを行う方法はありますか?

どうもありがとう、

マット

4

1 に答える 1

1

レジストリを内部から公開に変更してみてください。

于 2013-01-25T18:44:30.027 に答える