2012-01-12 82 views
1

如何将参数传递给解析器以创建对象?服务分辨率/位置和参数

我有我想要传递到数据服务对象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,将属性添加到IDataServiceX为IUoW - 没有设置它会很容易完成,程序员如何知道这个属性需要设置

+0

要回答选项2中的问题,一种方法是IDataServiceN的实现检查已设置的属性并抛出一个适合开发人员的异常。虽然不是最好的。 – harriyott 2012-01-12 09:53:11

+0

是的,我真的想要一个配置的解决方案或编译时异常 – 2012-01-12 10:15:46

回答

1

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

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

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

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