我是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>();
但是当我将其移动到配置时我得到了上述错误。提前谢谢。
答案 0 :(得分:0)
问题是在配置版本中您已将映射命名为“Loggerxcs”。
但是,您的LoggerBL将一个未命名的ILogger作为其参数。
删除
name="Loggerxcs"
从您的配置中,您应该没问题。