【问题标题】:Unity Dependency Injection using a config file - cant resolve dependency使用配置文件的 Unity 依赖注入 - 无法解决依赖关系
【发布时间】:2010-10-27 13:50:49
【问题描述】:

我正在使用我的 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);
}

但我得到一个例外,上面写着......

{"依赖解析失败,type = \"IProductRepository\", 名称 = \"productRepo\"。异常消息是:当前的构建操作 (构建密钥构建密钥[UnityDAL.ProductRepository,productRepo])失败: 尝试时无法解析参数 dataContextFactory 调用构造函数 UnityDAL.ProductRepository(UnityDAL.Interfaces. IDataContextFactory 数据上下文工厂)。 (策略类型 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy,索引 2)"}

我认为这个节点正在接线

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

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

干杯,

~在圣地亚哥

【问题讨论】:

  • productRepo 类型是否为IDataContextFactory?您需要传入IDataContextFactory 或在Unity 配置文件中设置构造函数。

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


【解决方案1】:

这是一个映射问题。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2016-02-16
    • 2017-02-20
    相关资源
    最近更新 更多