2011-10-20 11 views
20

मैं एक एमवीसी नियंत्रक में नामित पैरामीटर का उपयोग कर निर्भरता को हल करना चाहता हूं। मैं Autofac कंटेनर का उपयोग कर सकते हैं मैं बहुत तरह यह करने के लिए सक्षम होना चाहिए:मैं एएसपी.नेट एमवीसी 3 नियंत्रक में ऑटोफैक कंटेनर का उपयोग कैसे करूं?

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

मैं कैसे AutoFac कंटेनर का उपयोग करने के लिए बाहर नहीं मिल रहा। क्या कंटेनर का वैश्विक संदर्भ है जिसका मैं उपयोग कर सकता हूं या नामित पैरामीटर का उपयोग करने का कोई और तरीका है?

उत्तर

30

मुझे अभी पता चला है कि मैं एक ही चीज़ के लिए आईसीओम्पोनेंट कॉन्टेक्स्ट का उपयोग कर सकता हूं। आप नियंत्रक में IComponentContext का एक उदाहरण इंजेक्ट कर सकते हैं। Autofac in web applications, where should I store the container for easy access?

मैं यह भी पाया है कि कैसे विश्व स्तर पर यहां निर्भरता समाधानकर्ता तक पहुँच प्राप्त करने: 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") 
     ); 
    } 
} 

मैं इस सवाल में कंटेनर के लिए वैश्विक पहुंच पाना पर कुछ अच्छी सलाह मिल गया है

+2

आपको ऐसा नहीं करना चाहिए। यह एक बुरा अभ्यास है। सेवा लोकेटर दृष्टिकोण के बजाय कन्स्ट्रक्टर इंजेक्शन करना बेहतर है। बस कन्स्ट्रक्टर को आईएसईसी इंजेक्ट करें और इंजेक्शन इंस्टेस का उपयोग क्लास फिएल – Wojteq

+1

के रूप में करें, मैं उस दृष्टिकोण के साथ नामित पैरामीटर का उपयोग कैसे कर सकता हूं? –

+2

आप फ़ैक्टरी प्रतिनिधि का उपयोग करके कुछ समान प्राप्त कर सकते हैं: http://code.google.com/p/autofac/wiki/DelegateFactories – Wojteq

12
AutofacDependencyResolver.Current.ApplicationContainer 

.Resolve 

.ResolveNamed 

.ResolveKeyed 

..... 
+14

आप शायद अपनी प्रतिक्रिया को थोड़ा सा करना चाहें। बस कुछ नाम पोस्ट करना अधिकांश लोगों के लिए सहायक नहीं है। –

+4

मुझे लगता है कि उसका जवाब वास्तव में मदद कर रहा है। मुझे इस समस्या के साथ मेरी समस्या हल हो गई। –

संबंधित मुद्दे