Замок и дженерики - PullRequest
       23

Замок и дженерики

0 голосов
/ 16 января 2010

Учитывая этот код:

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(){ }
}

Как можно настроить Castle Windsor для предоставления мне экземпляра OtherRepository при вызове container.Resolve >?

Если Касл Виндзор не может этого сделать, какие контейнеры ioc могут?

1 Ответ

1 голос
/ 16 января 2010
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);
...