2010-01-15 5 views
0

Vu ce code:Château et génériques

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

Comment est-il possible de configurer le château de Windsor pour me donner un exemple de OtherRepository quand je l'appelle container.Resolve < IRepository < AutreClasse >>?

Si Castle Windsor ne peut pas faire cela, quels conteneurs ioc peuvent le faire?

Répondre

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); 
+0

J'ai édité ma question pour ajouter le IOtherRepository que j'ai oublié. Fonctionne bien aussi. Je devrais avoir testé cela avant de demander ... Merci – mathieu