Đối với "dự án" sau đây, tôi nhận được một lỗi rất khó chịu và không thể giải thích khi giải quyết Unity cho DI.Unity: Loại LogWriter không thể được xây dựng
InvalidOperationException - Loại LogWriter không thể được tạo. Bạn phải định cấu hình vùng chứa để cung cấp giá trị này.
? Ex.Message; "Độ phân giải của phụ thuộc không thành công, hãy nhập = \" WindowsFormsApplication1.Performance \ ", name = \" (không có) \ ". \ R \ nBắt đầu xảy ra khi: trong khi giải quyết. \ R \ nException là: InvalidOperationException - Loại LogWriter không thể được xây dựng . Bạn phải định cấu hình vùng chứa để cung cấp giá trị này. \ R \ n ----------------------------- ------------------ \ r \ nTrong thời gian ngoại lệ là , vùng chứa là: \ r \ n \ r \ n Giải quyết WindowsFormsApplication1.Performance, (không có) \ r \ n Giải quyết tham số \ "lw \" của hàm tạo WindowsFormsApplication1.Performance (Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter lw, Microsoft.Practices.EnterpriseLibrary.Exceptio nHandling.ExceptionManager em) \ r \ n Giải quyết Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter, (none) \ r \ n "
? ex.StackTrace; "tại Microsoft.Practices.Unity.UnityContainer.DoBuildUp (Loại t, Object hiện tại, Tên chuỗi, 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) trong e: \ Builds \ Unity \ UnityTemp \ Biên dịch \ Unity \ Unity \ Src \ UnityContainer.cs : dòng 485 \ r \ n tại Microsoft.Practices.Unity.UnityContainer.Resolve (Loại t, Tên chuỗi, ResolverOverride [] resolverOverrides) trong e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity \ Src \ UnityContainer.cs: dòng 173 \ r \ n tại Microsoft.Practices.Unity.UnityContainerExtensions.Resolve [T] (IUnityContainer container, ResolverOverride [] ghi đè) trong e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity \ Src \ UnityContainerExtensions.cs: dòng 504 \ r \ n tại WindowsFormsApplication1.Form1.OnLoad (EventArgs e) trong D: \ Devzone \ Tasking \ WindowsFormsApplication1 \ Form1.cs: dòng 33"
Trong một hình thức:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
try
{
IUnityContainer container = new UnityContainer();
Performance p = container.Resolve<Performance>();
}
catch (Exception ex)
{
}
}
lớp phụ thuộc:
public class Performance
{
public Performance(LogWriter lw, ExceptionManager em)
{
}
}
Cấu hình file:
<?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}
Message: {message}{newline}
Category: {category}{newline}
Priority: {priority}{newline}
EventId: {eventid}{newline}
Severity: {severity}{newline}
Title:{title}{newline}
Machine: {localMachine}{newline}
App Domain: {localAppDomain}{newline}
ProcessId: {localProcessId}{newline}
Process Name: {localProcessName}{newline}
Thread Name: {threadName}{newline}
Win32 ThreadId:{win32ThreadId}{newline}
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 & 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>
Arhhhhhhhhh !!! Tuyệt vời. Cảm ơn bạn đời. – rism
Đối với bất cứ ai khác, đây là tất cả những gì tôi cần làm: var container = new UnityContainer(). AddNewExtension(); –
rism
Tôi mất một thời gian để tìm ra, nhưng câu trả lời này rất hữu ích. Nếu ai đó muốn khai báo nó trong một tập tin unity.config đây là cách nó nên được thực hiện: –
Konrad