Unity DI配置

时间:2016-05-29 08:07:27

标签: c# unitydi

我是Unity DI的新手,在解决依赖问题时遇到了错误。错误消息显示“当前类型,Data.Core.Repository.ILogger,是一个接口,无法构造。您是否缺少类型映射?”

配置和代码如下。

CONFIG

 <configSections>
    <section name="unity"
    type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
  </configSections>

  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <assembly name ="BusinessLogic"/>
    <assembly name ="Data.Core"/>
    <namespace name="Data"/>
    <namespace name="Data.Core"/>
    <namespace name="Data.Core.Implimentation"/>
    <namespace name="Data.Core.Repository"/>
    <namespace name="BusinessLogic" />

    <typeAliases>
      <typeAlias alias="Logger1" type="Data.Core.Implimentation.Logger1,Data.Core.Implimentation" />
      <typeAlias alias="Logger2" type="Data.Core.Implimentation.Logger2,Data.Core.Implimentation" />
      <typeAlias alias="ILogger" type="Data.Core.Repository.ILogger,Data.Core.Repository" />
    </typeAliases>
    <container>
      <register type="ILogger" mapTo="Logger2" name="Loggerxcs" >
     </register>
    </container>

控制台应用(前端)

    var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
        IUnityContainer container = new UnityContainer().LoadConfiguration(section);


        // Resolving Dependancy  Error is @ here
        LoggerBL _logger = container.Resolve<LoggerBL>();

业务逻辑

 // File Logger
    private ILogger _logger;// = new Data.Core.Implimentation.Logger2();

    public LoggerBL(ILogger logger)
    {
        _logger = logger;
    }

    public string LogToFile()
    {
        return _logger.LogToFile();
    }
}

当我尝试使用以下

从c#代码中恢复其优势时,这一切都很好
         IUnityContainer container = new UnityContainer();
       container.RegisterType<ILogger, Logger2>();

但是当我将其移动到配置时我得到了上述错误。提前谢谢。

1 个答案:

答案 0 :(得分:0)

问题是在配置版本中您已将映射命名为“Loggerxcs”。

但是,您的LoggerBL将一个未命名的ILogger作为其参数。

删除

name="Loggerxcs" 

从您的配置中,您应该没问题。