【发布时间】:2014-02-22 16:50:21
【问题描述】:
我们有以下 IProduct 和 ILogger 类的实现。经理类被用作沟通渠道。我们已经使用下面给出的统一来解决管理器类,但它给出了以下错误-
===================unity configuration==========
IUnityContainer container = new UnityContainer();
container.RegisterType<ILogger, FileLogger>("File");
container.RegisterType<ILogger, BDLogger>("DB");
container.RegisterType<IProduct, ProductA>("productA");
container.RegisterType<IProduct, ProductB>("productB");
container.RegisterType<ProducManager>(new InjectionConstructor(container.Resolve<IProduct>("productA")));
container.Resolve<ProducManager>("productA");
========================================================
"解析依赖失败,type = \"usingDI.IProduct\", name = \"productA\"。\r\n出现异常 while: while 正在解决。\r\n异常是: InvalidOperationException - 当前 类型,使用DI.ILogger,是一个接口,不能被构造。是 你错过了一个类型 映射?\r\n-------------------------------------------- ---\r\n在 异常发生的时间,容器是:\r\n\r\n Resolving usingDI.ProductA,productA (映射自 usingDI.IProduct, productA)\r\n 解析构造函数的参数“logger” usingDI.ProductA(usingDI.ILogger 记录器)\r\n 正在解决 使用 DI.ILogger,(none)\r\n"}"
请建议我解决管理器类依赖关系的最佳方法。
public interface IProduct
{
void dosomething();
}
public class ProducManager
{
IProduct _product;
public ProducManager(IProduct product)
{
_product = product;
}
public void DoSomething()
{
_product.dosomething();
}
}
public class ProductA : IProduct
{
ILogger _logger;
public ProductA(ILogger logger)
{
_logger = logger;
}
public void dosomething()
{
try
{
//code
//
}
catch (Exception ex)
{
_logger.WriteLog(ex.Message);
}
}
}
public class ProductB : IProduct
{
ILogger _logger;
public ProductB(ILogger logger)
{
_logger = logger;
}
public void dosomething()
{
try
{
//code
//
}
catch (Exception ex)
{
_logger.WriteLog(ex.Message);
}
}
}
public class LogManager
{
ILogger _logger;
public LogManager(ILogger logger)
{
_logger = logger;
}
public void WriteLog(string exception)
{
_logger.WriteLog(exception);
}
}
public interface ILogger
{
void WriteLog(string exception);
}
public class FileLogger : ILogger
{
public void WriteLog(string exception)
{
}
}
public class BDLogger : ILogger
{
public void WriteLog(string exception)
{
}
}
【问题讨论】:
-
添加了统一配置。
标签: c# dependency-injection unity-container