2011-10-20 12 views
20

Me gustaría resolver una dependencia utilizando un parámetro con nombre en un controlador MVC. Si puedo acceder al contenedor Autofac yo debería ser capaz de hacerlo de esta manera:¿Cómo accedo al contenedor autofac en el controlador ASP.NET MVC3?

var service = Container.Resolve<IService>(
    new NamedParameter("fileExtension", dupExt) 
); 

no puedo encontrar la manera de acceder al contenedor autofac. ¿Hay alguna referencia global al contenedor que pueda usar o hay alguna otra manera de usar parámetros nombrados?

Respuesta

30

Acabo de descubrir que puedo usar IComponentContext para lo mismo. Puede inyectar una instancia de IComponentContext en el controlador.

public class MyController : Controller 
{ 
    private readonly IComponentContext _icoContext; 

    public void MyController(IComponentContext icoContext) 
    { 
     _icoContext= icoContext; 
    } 

    public ActionResult Index() 
    { 
     var service = _icoContext.Resolve<IService>(
      new NamedParameter("ext", "txt") 
     ); 
    } 
} 

he encontrado un buen consejo en conseguir el acceso global al contenedor en esta pregunta: Autofac in web applications, where should I store the container for easy access?

También he encontrado cómo obtener acceso al solucionador de dependencias a nivel mundial aquí: Global access to autofac dependency resolver in ASP.NET MVC3?

+2

No deberías hacer eso. Es una mala práctica. En lugar del enfoque del localizador de servicios, es mejor hacer la inyección del constructor. Simplemente inyecte IService al constructor y use el instance inyectado como un campo de clase – Wojteq

+1

¿Cómo puedo usar los parámetros con ese enfoque? –

+2

Puede obtener algo similar utilizando el delegado de fábrica: http://code.google.com/p/autofac/wiki/DelegateFactories – Wojteq

12
AutofacDependencyResolver.Current.ApplicationContainer 

.Resolve 

.ResolveNamed 

.ResolveKeyed 

..... 
+14

Es posible que desee completar su respuesta un poco. Solo publicar algunos nombres no es tan útil para la mayoría de las personas. –

+4

Creo que su respuesta realmente está ayudando. Tengo mi problema resuelto con esta respuesta. –

Cuestiones relacionadas