2012-05-10 9 views
8

मैं "BigEye.Business" नामक एक डीएलएल पंजीकृत करने की कोशिश कर रहा हूं और उस फ़ाइल को एमवीसी 3 प्रोजेक्ट में संदर्भित करता हूं। लेकिन जब मैं उस डीएलएल में किसी ऑब्जेक्ट का उदाहरण प्राप्त करने का प्रयास करता हूं, तो ऑटोफैक कहता है कि यह पंजीकृत नहीं है।असेंबैक रजिस्टर डीएलएल असेंबली.लोड

private static IContainer SetDIContainer() 
     { 
      var builder = new ContainerBuilder(); 
      builder.RegisterControllers(Assembly.GetExecutingAssembly()); 
      builder.RegisterType<UserAuthManager>().As<IUserAuth>().InstancePerHttpRequest(); 
      builder.RegisterType<SessionManager>().As<ISession>().InstancePerHttpRequest(); 


      //Here is the code to register that dll 
      var services = Assembly.Load("BigEye.Business"); 
      builder.RegisterAssemblyTypes(services); 
      IContainer container = builder.Build(); 
      DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

      return container; 
     } 

     public static T GetInstance<T>() 
     { 
      IContainer container = SetDIContainer(); 

      using(var httpRequestScope = container.BeginLifetimeScope("httpRequest")) 
      { 
       return httpRequestScope.Resolve<T>(); 
      } 

     } 

और जब मैं GetInstance फ़ंक्शन को कॉल मैं मिल "का अनुरोध सेवा 'BigEye.Interfaces.Business.IUser' पंजीकृत नहीं किया गया है": यहाँ मैं कैसे रजिस्टर और हल वस्तु है। क्या मुझे बिजनेस डीएलएल में सभी घटकों को पंजीकृत करना चाहिए? क्या इसे करने का कोई तरीका है? क्योंकि व्यवसाय में वस्तुओं और सेवाओं को समय में बदल जाएगा।

धन्यवाद

+0

क्या आप इस परियोजना में अपने डीएलएल का संदर्भ नहीं जोड़ सकते हैं? –

+1

वैसे मैं ऐसा कर सकता हूं लेकिन मैं इसे इंजेक्ट करना चाहता हूं ... – mehmetserif

+0

यही है कि 'बिल्डर। रजिस्ट्रार एस्पेरियल्स टाइप (सेवाएं);' ऐसा करना है, है ना? मैं उसमें कदम उठाने की कोशिश करता हूं यदि आप यह काम कर सकते हैं कि वास्तव में वह पंक्ति क्या कर रही है। क्या आपके पास असेंबली के बीच कोई विरासत है, यानी क्या आप उस असेंबली का संदर्भ जोड़ सकते हैं जो इंटरफेस को परिभाषित करता है कि आपकी व्यावसायिक असेंबली कम से कम लागू होती है? – Rup

उत्तर

8

मुझे लगता है कि अपने विधानसभा IUser इंटरफेस के एक या अधिक कार्यान्वयन में शामिल है। अब, जब आप चलाएँ:

builder.RegisterAssemblyTypes(services); 
कोई भी अतिरिक्त पैरामीटर आप वास्तव में है कि विधानसभा वर्ग द्वारा keyed में सभी प्रकार दर्ज कर रहे हैं बिना

। आप शायद देखेंगे कि इस संकल्प काम करता है:

GetInstance<SomeSpecificUserImplementation>(); 

आदेश इंटरफ़ेस द्वारा अपनी सेवाओं को प्रमुख करने के लिए, बस निम्न कार्य करें:

builder.RegisterAssemblyTypes(services).AsImplementedInterfaces(); 

अब आपके सभी सेवाओं इंटरफेस द्वारा keyed जाएगा कि क्या वे विशिष्ट वर्ग के बजाय कार्यान्वित करें, इस प्रकार निम्नलिखित कार्य करेंगे:

GetInstance<IUser>(); 
संबंधित मुद्दे