Unity:无法构造LogWriter类型

对于以下“项目”,我在解析Unity for DI时会遇到一个非常烦人且无法解释的错误。

InvalidOperationException – 无法构造LogWriter类型。 您必须配置容器以提供此值。

?ex.Message; “依赖项的解析失败,type = \”WindowsFormsApplication1.Performance \“,name = \”(none)\“。\ r \ n发生exception时:解析时。\ r \ nException是:InvalidOperationException – LogWriter类型不能是您必须配置容器以提供此值。\ r \ n ———————————- ————- \ r \ n在exception时,容器是:\ r \ n \ r \ n解析WindowsFormsApplication1.Performance,(无)\ r \ n解析参数\ “lw”构造函数WindowsFormsApplication1.Performance(Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter lw,Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionManager em)\ r \ n解析Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter,(none) \ r \ n”

?ex.StackTrace; “在Microsoft.Practices.Unity.UnityContainer.DoBuildUp(类型t,对象存在,字符串名称,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位于e:\ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity \ Src \中的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) UnityContainer.cs:第485行\ r \ n,位于e:\ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity \ Src \中的Microsoft.Practices.Unity.UnityContainer.Resolve(Type t,String name,ResolverOverride [] resolverOverrides) UnityContainer.cs:第173行\ r \ n,位于e:\ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity \ Src \中的Microsoft.Practices.Unity.UnityContainerExtensions.Resolve [T](IUnityContainer容器,ResolverOverride []覆盖) UnityContainerExtensions.cs:在D:\ Devzone \ Tasking \ WindowsFormsApplication1 \ Form1.cs:第33行中的WindowsFormsApplication1.Form1.OnLoad(EventArgs e)中的第504行\ r \ n“

在一种forms:

  protected override void OnLoad(EventArgs e) { base.OnLoad(e); try { IUnityContainer container = new UnityContainer(); Performance p = container.Resolve(); } catch (Exception ex) { } } 

依赖类:

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

配置文件:

    

您需要将Enterprise Library扩展添加到容器中。 没有它,容器不会读取配置文件,因此不知道如何创建Entlib对象,如LogWriter。

尝试获取LogWriter类型的实例时出现激活错误,键“”

检查你的配置文件,它必须有正确的默认’loggingConfiguration’部分

为了让Unity构建您的Performance类,它需要知道如何构造ILogWriter的实现。

我在代码中的任何地方都看不到你告诉Unity要为ILogWriter接口创建什么类,所以我怀疑你可能需要添加它。

试试这个:

 protected override void OnLoad(EventArgs e) { base.OnLoad(e); try { IUnityContainer container = new UnityContainer(); container.RegisterType(); container.RegisterType(); container.RegisterType(new InjectionConstructor(typeof(ILogWriter), typeof(ExceptionManager)); Performance p = container.Resolve(); } catch (Exception ex) { } } 

LogWriter没有空构造函数或具有所有具体类型参数的构造函数: LogWriter构造函数 。

因此,Unity无法构建它,正如它所说,它需要您的帮助,通过配置容器来提供实现。

作为确认,ExceptionManager可能会被解决,因为它只有一个构造函数 ,无参数:)