【问题标题】:Service Resolution/Location and Parameters服务分辨率/位置和参数
【发布时间】:2012-02-08 14:10:19
【问题描述】:

如何将参数传递给解析器以创建对象?

我有一个要传递给数据服务对象的 UoW 对象,我希望能够确保以特定顺序创建的数据服务对象是使用一个 UoW 对象创建的

例如

using (var context = Resolver.GetService<IUoW>())
{
    var dataService1 = Resolver.GetService<IDataService1>();
    var dataService2 = Resolver.GetService<IDataService2>();

    // do some stuff

    context.Commit();
}

选项 1,将 IUoW 传递给 Resolver.GetService 调用 - 不了解 IDataServiceX 实现的构造函数

选项 2,为 IUoW 向 IDataServiceX 添加一个属性 - 不设置很容易,程序员怎么知道需要设置这个属性

【问题讨论】:

  • 要具体回答选项 2 中的问题,一种方法是让 IDataServiceN 的实现检查属性是否已设置并引发对开发人员友好的异常。虽然不是最好的。
  • 是的,我真的想要一个已配置的解决方案或编译时异常

标签: ioc-container service-locator


【解决方案1】:

我之前在实体框架上实现了工作单元 (UoW) 和存储库模式。

实际上,UoW 抽象了 EF 上下文,而存储库抽象了实体集。

在我的存储库实现中,是 UoW 的属性,这意味着管理存储库生命周期的不是 IoC 容器,而是 UoW 的责任。

在您的情况下,存储库被命名为服务,但可能同样适用。 IUoW 接口能否为特定工作单元中存在的所有服务提供两个(或更多)属性?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多