Abbiamo una soluzione con più progetti che rappresentano gli strati della nostra applicazione. ad es.E 'possibile che Castle Windsor risolva le dipendenze dalla proprietà quando non si ha un riferimento al container?
Domain
dati
Logic
WebUI
contenitore Il nostro castello di Windsor viene fatto riferimento dal nostro livello di web e abbiamo poi a cascata queste dipendenze attraverso i nostri strati. Per esempio ...
// In Domain
public interface IFooRepository
{
void DoSomething();
}
// In Data
public class FooRepository : IFooRepository
{
public void DoSomething()
{
// Something is done
}
}
// In Logic
public class MyThingManager
{
private readonly IFooRepository fooRepository;
public MyThingManager(IFooRepository fooRepository)
{
this.fooRepository = fooRepository;
}
public void AMethod()
{
this.fooRepository.DoSomething();
}
}
// In Web
// in some controller....
var newManager = new MyThingManager(WindsorContainer.Resolve<IFooRepository>());
newManager.DoSomething();
e questo funziona bene fino a quando i nostri manager hanno un sacco di membri che hanno le proprie dipendenze. Quando ciò accade, finiamo per risolvere sia le dipendenze dei manager che le loro dipendenze e le distribuzioni dipendenti dal livello web. Questo risulta essere alcuni costruttori piuttosto grandi.
C'è un modo più elegante di, ad esempio se i componenti interni di un gestore risolvono le proprie dipendenze senza avere accesso al contenitore?
Ricordare che SOLO il livello Web ha accesso al contenitore (per evitare una dipendenza di progetto circolare), quindi solo il livello Web può attivare attivamente WindsorContainer.Resolve() il livello logico non può quindi l'unico modo per eseguire una cascata una dipendenza senza l'assistenza dei contenitori era quella di risolverlo nel livello Web e poi di passarlo sulla catena usando la sua interfaccia.
"finiamo per risolvere sia le dipendenze dei gestori che le dipendenze delle dipendenze e le cascading dal livello web". Non lo capisco Quando si utilizza l'iniezione del costruttore e si lascia che il contenitore inietti automaticamente le dipendenze nel costruttore di un tipo, non dovrebbe esserci alcun problema. Potrebbe essere utile mostrare un po 'più di codice per visualizzare questo problema. – Steven