2011-10-20 36 views
20

Bir MVC denetleyicisinde adlandırılmış bir parametre kullanarak bağımlılığı çözmek istiyorum. Ben Autofac konteyner erişemiyorsanız Öyle gibi yapmak mümkün olmalıdır:ASP.NET MVC3 denetleyicisinde otomatik kapsayıcıya nasıl erişirim?

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

Ben AutoFac konteyner erişmek için öğrenmek mümkün değil. Kullanabileceğim kapsayıcıya genel bir başvuru var mı, yoksa adlandırılmış parametreleri kullanmanın başka bir yolu var mı?

cevap

30

IComponentContext'i aynı şey için kullanabileceğimi öğrendim. Denetleyiciye bir IComponentContext örneği enjekte edebilirsiniz. Autofac in web applications, where should I store the container for easy access?

Ben de global olarak burada bağımlılık resolvere erişmek için nasıl bulduk: Global access to autofac dependency resolver in ASP.NET MVC3?

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") 
     ); 
    } 
} 

bu söz konusu kaba küresel erişimini alma konusunda bazı tavsiyeleri buldum

+2

Bunu yapmamalısınız. Bu kötü bir uygulama. Servis belirleyici yaklaşımı yerine, kurucu enjeksiyonu yapmak daha iyidir. IService'yi kurucuya enjekte edin ve enjekte edilmiş instace'ı bir sınıf olarak kullanın – Wojteq

+1

Adlandırılmış parametreleri bu yaklaşımla nasıl kullanabilirim? –

+2

Fabrika temsilcisi kullanılarak benzer bir şey alabilirsiniz: http://code.google.com/p/autofac/wiki/DelegateFactories – Wojteq

12
AutofacDependencyResolver.Current.ApplicationContainer 

.Resolve 

.ResolveNamed 

.ResolveKeyed 

..... 
+14

Yanıtınızı birazcık hafifletmek isteyebilirsiniz. Sadece birkaç isim yayınlamak çoğu insan için yararlı değildir. –

+4

Sanırım cevabı aslında yardımcı oluyor. Bu sorunun cevabını çözdüm. –

İlgili konular