2012-10-18 21 views
6

निम्नलिखित "प्रोजेक्ट" के लिए मुझे एकता को हल करने के दौरान एक बहुत परेशान और अक्षम त्रुटि मिल रही है।एकता: प्रकार लॉगवाइटर का निर्माण नहीं किया जा सकता

अवैधऑपरेशन अपवाद - प्रकार लॉगवाइटर का निर्माण नहीं किया जा सकता है। आपको इस मान की आपूर्ति के लिए कंटेनर को कॉन्फ़िगर करना होगा।

? Ex.Message; "निर्भरता का संकल्प असफल रहा, टाइप = \" विंडोजफॉर्म एप्प्लिकेशंस 1। प्रदर्शन \ ", नाम = \" (कोई नहीं) \ "। \ R \ n अपवाद हुआ जबकि: हल हो रहा है। \ R \ n अपवाद है: अवैधऑपरेशन अपवाद - प्रकार LogWriter नहीं बनाया जा सकता है। आपको मान की आपूर्ति करने के लिए कंटेनर को कॉन्फ़िगर करना होगा। \ R \ n ----------------------------- ------------------ \ r \ n अपवाद का समय, कंटेनर था: \ r \ n \ r \ n हल करना WindowsForms अनुप्रयोग 1। प्रदर्शन, (कोई भी नहीं) \ r \ n पैरामीटर \ "lw \" कन्स्ट्रक्टर \ "lw \" को हल करना WindowsFormsApplication1.Performance (Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter lw, माइक्रोसॉफ्ट.प्रैक्टिस। एंटरप्राइज़ लाइब्रेरी। एक्सेप्टियो nHandling.ExceptionManager उन्हें) \ r \, Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter समाधान करना n (कोई नहीं) \ r \ n "

ex.StackTrace? " Microsoft.Practices.Unity.UnityContainer.DoBuildUp पर में ई (प्रकार टी, वस्तु मौजूदा , स्ट्रिंग नाम, IEnumerable 1 resolverOverrides) in e:\\Builds\\Unity\\UnityTemp\\Compile\\Unity\\Unity\\Src\\UnityContainer.cs:line 515\r\n at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name, IEnumerable 1 resolverOverrides): \ \ एकता \ UnityTemp \ संकलित \ एकता \ एकता \ src \ UnityContainer.cs बनाता है : 485 \ r \ n Microsoft.Practices.Unity.UnityContainer.Resolve (टाइप टी, स्ट्रिंग नाम, ResolverOverride [] resolverOverrides) ई: \ बिल्ड \ Unity \ UnityTemp \ compile \ unity \ unity \ Src \ UnityContainer.cs: लाइन Microsoft.Practices.Unity.UnityContainerExtensions.Resolve [टी] पर \ r \ n (IUnityContainer कंटेनर, ResolverOverride [] ओवरराइड) में ई: \ बनाता है \ एकता \ UnityTemp \ संकलित \ एकता \ एकता \ Src \ UnityContainerExtensions.cs: रेखा \ Devzone \ टास्किंग \ WindowsFormsApplication1 \ Form1.cs: WindowsFormsApplication1.Form1.OnLoad (EventArgs ई) डी में कम से 504 \ r \ n लाइन 33 "

एक रूप में:

protected override void OnLoad(EventArgs e) 
     { 
      base.OnLoad(e); 

      try 
      { 
       IUnityContainer container = new UnityContainer(); 
       Performance p = container.Resolve<Performance>(); 
      } 
      catch (Exception ex) 
      { 

      } 
     } 

निर्भरता वर्ग:

public class Performance 
    { 
     public Performance(LogWriter lw, ExceptionManager em) 
     { 
     } 
    } 

विन्यास फ़ाइल:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> 
     <section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> 
    </configSections> 
    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="General"> 
     <listeners> 
      <add name="Event Log Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
       listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
       source="Enterprise Library Logging" formatter="Text Formatter" 
       log="" machineName="." traceOutputOptions="None" /> 
     </listeners> 
     <formatters> 
      <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
       template="Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}" 
       name="Text Formatter" /> 
     </formatters> 
     <categorySources> 
      <add switchValue="All" name="General"> 
       <listeners> 
        <add name="Event Log Listener" /> 
       </listeners> 
      </add> 
      <add switchValue="All" name="Category2" /> 
     </categorySources> 
     <specialSources> 
      <allEvents switchValue="All" name="All Events" /> 
      <notProcessed switchValue="All" name="Unprocessed Category" /> 
      <errors switchValue="All" name="Logging Errors &amp; Warnings"> 
       <listeners> 
        <add name="Event Log Listener" /> 
       </listeners> 
      </errors> 
     </specialSources> 
    </loggingConfiguration> 
    <exceptionHandling> 
     <exceptionPolicies> 
      <add name="Policy"> 
       <exceptionTypes> 
        <add name="All Exceptions" type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
         postHandlingAction="NotifyRethrow" /> 
       </exceptionTypes> 
      </add> 
     </exceptionPolicies> 
    </exceptionHandling> 
</configuration> 

उत्तर

10

आप के लिए उद्यम लाइब्रेरी विस्तार जोड़ने की जरूरत आपका कंटेनर इसके बिना, कंटेनर कॉन्फ़िगरेशन फ़ाइल नहीं पढ़ता है और इसलिए यह नहीं जानता कि LogWriter की तरह Entlib ऑब्जेक्ट्स कैसे बनाएं।

+0

अरह्ह्ह्ह्ह्ह्ह्ह्ह !!! बहुत बढ़िया। धन्यवाद दोस्त। – rism

+1

किसी और के लिए यह सब मुझे करने की ज़रूरत है: var container = new unityContainer()। AddNewExtension (); – rism

+0

मुझे इसे समझने में कुछ समय लगा, लेकिन यह जवाब बहुत उपयोगी था। अगर कोई इसे एकता.कॉन्फिग फ़ाइल में घोषित करना चाहता है तो यह इस प्रकार किया जाना चाहिए: <एक्सटेंशन टाइप = "माइक्रोसॉफ्ट.प्रैक्टिस। एंटरप्राइज लाइब्रेरी। कॉमन। कॉन्फ़िगरेशन.इंटाइंटर। एंटरप्राइज लाइब्रेरी कोर एक्सटेन्शन, माइक्रोसॉफ्ट। प्रैक्टिस। एंटरप्राइज लाइब्रेरी.कॉमोन" /> – Konrad

0

यूनिटी के लिए अपनी प्रदर्शन कक्षा का निर्माण करने के लिए, यह जानना आवश्यक है कि ILogWriter के कार्यान्वयन को कैसे बनाया जाए।

मैं आपके कोड में कहीं भी नहीं देख सकता हूं जहां आप एकता को बताते हैं कि आईएलओजीवाइटर इंटरफ़ेस के लिए कौन सी कक्षा बनाना है, इसलिए मुझे संदेह है कि आपको इसे जोड़ने की आवश्यकता हो सकती है।

+0

वह ILogWriter, लेकिन LogWriter है, जो एक ठोस वर्ग है का उपयोग नहीं कर रहा है, लेकिन वह निर्भरता कि LogWriter की आवश्यकता है प्रदान नहीं कर रहा है इसके निर्माता में। – Tallmaris

+0

यह डीआई सही है, इसलिए मैं प्रदर्शन वर्ग के निर्माता में लॉगवाइटर (ILogWriter का एक ठोस कार्यान्वयन) मांग रहा हूं? – rism

+0

हाँ, वास्तव में आप हैं, मैंने कल्पना की होगी। तो LogWriter के लिए एक पैरामीटर रहित कन्स्ट्रक्टर है? –

0

लॉगवाइटर के पास सभी ठोस प्रकार पैरामीटर के साथ एक खाली कन्स्ट्रक्टर या कन्स्ट्रक्टर नहीं है: LogWriter Constructor

तो यूनिटी इसे बनाने में विफल रहता है और जैसा कि यह कहता है, इसे कार्यान्वयन प्रदान करने के लिए कंटेनर को कॉन्फ़िगर करके आपकी सहायता की आवश्यकता होगी।

एक पुष्टि के रूप में, ExceptionManager शायद, ठीक है का समाधान हो जाएगा, क्योंकि यह केवल एक ही constructor, parameterless रूप में अच्छी तरह :)

+0

हम्म जो आपने कहा है, मैंने कहा है लेकिन मुझे एंट लिब ब्लॉक से प्रकारों पर रचनाकारों के साथ खुद को संबंधित नहीं है। – rism

0

है इस प्रयास करें:

protected override void OnLoad(EventArgs e) 
     { 
      base.OnLoad(e); 

      try 
      { 
       IUnityContainer container = new UnityContainer(); 
       container.RegisterType<ILogWriter, LogWriter>(); 
       container.RegisterType<ExceptionManager>(); 
       container.RegisterType<Performance>(new InjectionConstructor(typeof(ILogWriter), typeof(ExceptionManager));      
       Performance p = container.Resolve<Performance>(); 
      } 
      catch (Exception ex) 
      { 

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

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