【问题标题】:Castle and generics城堡和泛型
【发布时间】:2010-01-15 23:19:55
【问题描述】:

考虑到这段代码:

interface IRepository<T>
{
    void Save();
}

class Repository<T>
{
    public virtual void Save() // something 
    { }
}

interface IOtherRepository : IRepository<OtherClass>
{
    void Other();
}

class OtherRepository : Repository<OtherClass>, IOtherRepository
{
    public override void Save() // something different
    { }

    public override void Other(){ }
}

当我调用 container.Resolve> 时,如何配置 Castle Windsor 给我一个 OtherRepository 的实例?

如果温莎城堡不能做到这一点,哪些 ioc 容器可以?

【问题讨论】:

    标签: castle-windsor ioc-container


    【解决方案1】:
    var container = new WindsorContainer();
    container.Register(Component.For(typeof(IRepository<>))
                                .ImplementedBy(typeof(Repository<>));
    container.Register(Component.For<IRepository<OtherClass>, IOtherRepository>()
                                .ImplementedBy<OtherRepository>());
    var repo = container.Resolve<IRepository<Something>>();
    Assert.IsInstanceOfType(typeof(Repository<Something>), repo);
    var specificRepo = container.Resolve<IRepository<OtherClass>>();
    Assert.IsInstanceOfType(typeof(OtherRepository), specificRepo);
    var otherRepo = container.Resolve<IOtherRepository>();
    Assert.AreSame(otherRepo, specificRepo);
    

    【讨论】:

    • 我编辑了我的问题以添加我忘记的 IOtherRepository。效果也很好。我应该在问之前测试一下...谢谢
    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多