使用配置文件进行Unity依赖注入 - 无法解析依赖关系

时间:2010-10-27 13:50:50

标签: c# configuration dependency-injection unity-container

我正在使用我的app.config告诉Unity我的界面输入映射...

<unity>
<containers>
  <container>
    <types>
      <type type="UnityDAL.Interfaces.IDataContextFactory, UnityDAL"
         mapTo="UnityDAL.UnityDemoDataContextFactory, UnityDAL" />
      <type type="UnityDAL.Interfaces.IProductRepository, UnityDAL"
         mapTo="UnityDAL.ProductRepository, UnityDAL" />
      <type name="productRepo" 
         type="UnityDAL.Interfaces.IProductRepository, UnityDAL"
         mapTo="UnityDAL.ProductRepository, UnityDAL" />

   and so on...

使用此代码

var wrapper = UnityWrapper.Create();
var productRepository = 
    wrapper.Container.Resolve<IProductRepository>("productRepo");
var productsBO = new ProductBO(productRepository);
var products = productsBO.GetAllProducts();

这是包装器对象的构造函数...

public UnityWrapper()
{
    _container = new UnityContainer();
    var section = 
        (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
    section.Containers.Default.Configure(_container);
}

但我得到一个例外说明......

{“依赖关系的解析失败,输入= \”IProductRepository \“, name = \“productRepo \”。异常消息是:当前的构建操作 (构建密钥构建密钥[UnityDAL.ProductRepository,productRepo])失败: 尝试时无法解析参数dataContextFactory 调用构造函数UnityDAL.ProductRepository(UnityDAL.Interfaces。 IDataContextFactory dataContextFactory)。 (战略类型 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy,index 2)“}

我认为这个节点正在接线

<type type="UnityDAL.Interfaces.IDataContextFactory, UnityDAL"
   mapTo="UnityDAL.UnityDemoDataContextFactory, UnityDAL" />

这里的想法最初是为了创建一个很好的依赖链。知道我做错了什么吗?如果您对如何解决问题有任何建议或提示,我想听听他们的意见。谢谢你的帮助。

干杯,

〜ck in San Diego

1 个答案:

答案 0 :(得分:1)

这是一个映射问题。

尝试解析UnityDAL.Interfaces.IProductRepository,首先需要解析UnityDAL.Interfaces.IDataContextFactory。接下来尝试解析UnityDAL.UnityDemoDataContextFactory,你会错过一些映射。 UnityDAL.UnityDemoDataContextFactory的ctor可能需要一些未注册的内容。

  

顺便说一句:你在这里做的是使用   服务地点。我避免这个   尽可能练习,但如果你   绝对需要这个然后尝试   公开common service locator。这个DLL附带Unity   并提供一个简单的服务定位器   只有界面。