服务分辨率/位置和参数

时间:2012-01-12 09:15:07

标签: ioc-container service-locator

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

我有一个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,为IDUServiceX添加IUoW属性   - 不设置它会很容易,程序员怎么知道这个属性需要设置

1 个答案:

答案 0 :(得分:1)

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

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

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

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