2009-09-05 5 views
0

Voici mon scénario: J'ai une interface ISampleProvider:Comment injecter des dépendances lors de la résolution d'un formulaire de service WindsorContainer?

public interface ISampleProvider<TEntity> 
{ 
TEntity Entity{get;} 
} 

et voici une implémentation pour cette interface:

public class SampleProvider<TEntity>:ISampleProvider<TEntity> 
{ 
public SampleProvider(TEntity entity) 
{ 
Entity=entity; 
} 
public TEntity Entity 
{ 
get;private set; 
} 
} 

Je voudrais injecter une entité dans SampleProvider quand je résous de WindsorContainer J'ai donc écrit ceci:

var container=new WindsorContainer(); 
container.AddComponent("smaple_provider",typeof(ISampleProvider<Person>),typeof(SampleProvider<Person>)); 
var arguments=new Hashtable{{"entity",new Person()}}; 
var sampleProvider=container.Resolve<ISampleProvider<Person>>(arguments); 

Mais ce n'est pas workin g et une exception de résolveur de dépendance est lancée qui indique "Cycle détecté dans la configuration"

Évidemment, je fais quelque chose de mal.

Répondre

2

Assurez-vous que vous avez Windsor 2.0 ... Ce test fonctionne bien pour moi:

[TestFixture] 
public class SampleProviderTests { 
    public interface ISampleProvider<TEntity> { 
     TEntity Entity { get; } 
    } 

    public class SampleProvider<TEntity> : ISampleProvider<TEntity> { 
     public SampleProvider(TEntity entity) { 
      Entity = entity; 
     } 

     public TEntity Entity { get; private set; } 
    } 

    public class Person {} 

    [Test] 
    public void test() { 
     var container = new WindsorContainer(); 
     container.AddComponent("smaple_provider", typeof(ISampleProvider<Person>), typeof(SampleProvider<Person>)); 
     var arguments = new Hashtable { { "entity", new Person() } }; 
     var sampleProvider = container.Resolve<ISampleProvider<Person>>(arguments);    
    } 
} 
Questions connexes