0

このチュートリアルを参照しています。

最初、IController 型は次のように登録されます。

public class ControllersInstaller:IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Classes.FromThisAssembly()
                            .BasedOn<IController>()
                            .LifestyleTransient());
    }
}

ただし、後で EventRepository は次のように登録されます。

public class RepositoriesInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Classes.FromThisAssembly()
                            .Where(Component.IsInSameNamespaceAs<EventRepository>())
                            .WithService.DefaultInterfaces()
                            .LifestyleTransient()));
    }
}

2つの違いは何ですか?IController の登録に使用した方法で IEventRepository を登録しようとしたのですが、うまくいきませんか? なんで?

IEventRepository の場合、その実装 EventRepository が登録に使用されます。AnotherEventRepository などの別のクラスを実装する場合は、別の登録を追加する必要があります。単一の登録を使用して、すべてのタイプの IEventRepository を登録できませんか。

4

2 に答える 2

0

最初の登録はとても簡単です。インターフェイスを実装するすべてのクラスを登録するだけIControllerです。これらのクラスはサービスでもあります。したがって、たとえば解決したい場合。HomeControllerあなたはただ電話するだけcontainer.Resolve<HomeController>()です。

EventRepository2 番目の登録では、が宣言されている名前空間からすべてのクラスを取得し、それらをデフォルト インターフェイスに登録します。したがって、解決したいEventRepository場合は、に電話する必要がありますcontainer.Resolve<IEventRepository>()

同じ名前空間にある場合AnotherEventRepositoryは、別の登録を追加する必要はありません。しかし、それも実装している場合、IEventRepositoryどの実装が解決されるかは実際にはわかりません。

于 2013-07-31T12:19:23.973 に答える