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);
    }
}

注意:
Repository 位于Repositoriesnamespace
Entities 位于Entitiesnamespace 上,包括Entity所有实体的基类

它工作正常,但我认为它应该是一种更好的方法,更自动的方式使用约定注册,所以当我在我的项目中添加一个新实体时,windsor 会自动识别它,并为它注册存储库。还有一个问题,如何忽略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 回答