Problema:Crear instancia de una clase con dependencias utilizando Autofac
asumir la clase:
public class MyAwesomeClass
{
private IDependCls _dependCls;
public MyAwesomeClass(IDependCls dependCls)
{
_dependCls = dependCls;
}
}
Y en otro lugar que necesito para obtener una instancia de esa clase, así:
public class SomewhereElse
{
public void AwesomeMethod()
{
//...
// AwesomeStuff
//...
var GetErDone = new MyAwesomeClass(); // PROBLEM! No constructor with 0 arguements
}
}
La pregunta es, do I
Solución propuesta 1:
A) ¿tiene que hacer un constructor adicional que resuelva la dependencia? Por ejemplo:
public MyAwesomeClass() // new constructor
{
_dependCls = DependencyResolver.Current.GetService<IDependCls>();
}
public class SomewhereElse
{
public void AwesomeMethod()
{
var GetErDone = new MyAwesomeClass(); // IT WORKS!!
}
}
Solución propuesta 2:
B) utilizar el dispositivo de resolución dentro de AwesomeMethod
justo antes de var GetErDone
public class SomewhereElse
{
public void AwesomeMethod()
{
var depCls = _dependCls = DependencyResolver.Current.GetService<IDependCls>();
var GetErDone = new MyAwesomeClass(depCls); // IT WORKS!!
}
}
solución Autofac?
C) ¿Alguna otra forma de Autofac?
Buscando mejores prácticas, así como una buena solución de Autofac si es posible. Creo que la primera forma es la peor ya que las dependencias opcionales podrían generar mucho desorden.
Resumen:
¿Cómo puedo obtener una new MyAwesomeClass()
cuando MyAwesomeClass
tiene dependencias?
¿Realmente quieres decir _optional_ cuando lo dices? Si realmente es opcional, es posible que desee examinar la inyección de propiedades. Si no es así, y su computadora está atestada debido a demasiadas dependencias, tal vez su clase esté haciendo demasiado (vea también [esta respuesta] (http://stackoverflow.com/a/2420245/1282778)). –
No tengo una pregunta sobre el desorden del constructor, en lugar de crear una instancia de una clase que necesita la inyección del constructor. –
Gracias por no publicar la respuesta de la solución. No como cualquier otro cuerpo tiene este problema .../s –