Problema:Crea istanza di una classe con dipendenze utilizzando Autofac
Assumere il classe:
public class MyAwesomeClass
{
private IDependCls _dependCls;
public MyAwesomeClass(IDependCls dependCls)
{
_dependCls = dependCls;
}
}
E da qualche altra parte ho bisogno di ottenere un'istanza di quella classe, in questo modo:
public class SomewhereElse
{
public void AwesomeMethod()
{
//...
// AwesomeStuff
//...
var GetErDone = new MyAwesomeClass(); // PROBLEM! No constructor with 0 arguements
}
}
La domanda è, faccio a
Soluzione proposta 1:
A) è necessario creare un constuttore aggiuntivo che risolva la dipendenza? Per esempio:
public MyAwesomeClass() // new constructor
{
_dependCls = DependencyResolver.Current.GetService<IDependCls>();
}
public class SomewhereElse
{
public void AwesomeMethod()
{
var GetErDone = new MyAwesomeClass(); // IT WORKS!!
}
}
Soluzione proposta 2:
B) utilizzare il risolutore all'interno AwesomeMethod
destra prima var GetErDone
public class SomewhereElse
{
public void AwesomeMethod()
{
var depCls = _dependCls = DependencyResolver.Current.GetService<IDependCls>();
var GetErDone = new MyAwesomeClass(depCls); // IT WORKS!!
}
}
soluzione Autofac?
C) Qualche altro modo Autofac?
cerca di migliori pratiche, così come una buona soluzione Autofac se possibile. Penso che la prima sia la peggiore in quanto le dipendenze opzionali potrebbero portare a un sacco di confusione.
Sommario:
Come faccio a ottenere un new MyAwesomeClass()
quando MyAwesomeClass
ha dipendenze?
Intendi davvero _optional_ quando lo dici? Se è davvero opzionale, potresti voler esaminare l'iniezione di proprietà. In caso contrario, e il tuo amministratore è ingombrato a causa di troppe dipendenze, forse la tua classe sta facendo troppo (vedi anche [questa risposta] (http://stackoverflow.com/a/2420245/1282778)). –
Non ho una domanda sull'ingombro del costruttore, piuttosto che creare un'istanza di una classe che necessita dell'iniezione del costruttore. –
Grazie per non aver inviato la risposta alla soluzione. Non come nessun altro ha questo problema .../s –