2

これは一般的な問題であるはずです。検索しましたが、まだ解決策が見つかりませんでした。それがだまされている場合は、適切なリンクを教えてください。

したがって、いくつかのエンティティをサポートするための汎用リポジトリがあります。しばらくの間、次のように登録します。

public class ExpensiveServiceInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        Register<EntityA>(container);
        Register<EntityB>(container);
        //etc etc 
        //when there is a new one should register it manually
    }

    void Register<T>(IWindsorContainer container) where T : Entity
    {
        container.Register(Component.For<IRepository<T>>()
            .ImplementedBy<Repository<T>>()
            .LifeStyle.Transient);
    }
}

注:名前空間
にあるリポジトリすべてのエンティティのベースクラスを含む、名前空間に あるエンティティRepositories
EntitiesEntity

それは正常に動作していますが、より良い方法、慣習による登録を使用するより自動化された方法であるべきだと思うので、プロジェクトに新しいエンティティを追加すると、windsor は自動的にそれを認識し、リポジトリを登録します。もう1つの質問は、Entity(基本クラス)を無視してコンテナに登録しない方法です。

よろしく

4

2 に答える 2

7

このようなことを意味しますか?

container.Register(Component.For(typeof(IRepository<>))
            .ImplementedBy(typeof(Repository<>))
            .LifeStyle.Transient);
于 2012-07-07T10:43:50.853 に答える
0

このコードを試してください

var container = new WindsorContainer();


        container.Register(Component.For(typeof(ICustomGenericRepository<>))
        .ImplementedBy(typeof(CustomGenericRepository<>))
        .LifeStyle.Transient);
于 2018-10-15T10:00:49.747 に答える