2011-07-13 115 views
2

我正在向一个类注入存储库,一旦我注入了存储库,我将分配我的上下文给每个存储库,所以我有我的工作单元。拦截注入

我想知道的是,有没有办法让我自动将我的工作单元分配给每个存储库,因为我注入它以便开发人员在设置代码时不必考虑此问题。我已经在我的基类中配置了我的工作单元,这是开发人员将继承的工作单元。

我可以做些什么吗?

Bind<I>().To<S>().WhenInjectedInto<IBaseClass>(i,b => { i.UnitOfWork = b.UnitOfWork }); 

但是不必每次重复该模式?

[更新] 我在寻找方法来找出是否Ninject被注入和从什么到, https://github.com/ninject/ninject.extensions.interception

我想看看通过测试来看看这是为期不远基础。任何建议?

+0

我已经开发了这个的所有其他部分,现在每当我向类中注入一个存储库时,都必须指定它的工作单元,然后可能调用它的一个方法。我想将这个注入IRepository的一个隐含部分放到IObjectIGuaranteeHasUoW中。 – Hammerstein

回答

1

我认为更好的方法是使用构造函数注入将上下文注入到存储库中。在Web项目中,您可以使用InRequestScope进行上下文绑定。对于WPF/WinForms/Console应用程序,请查看Ninject.Extensions.NamedScope。您可以定义一个上下文用于您的所有依赖关系IBaseClass

+0

我把这个标记为答案,因为它让我重新考虑了设计,以及我从中得到了什么。我在给定的请求(MVC3)中使用了存储库,我从我的例子中无法理解看着这些存储库是如何从工作中获得相同的工作单位的。因此,我的想法是我的处理程序类拥有这个功能,并将其传递给任何存储库。更改存储库(基类)以负责抓取自己的UoW实际上没有什么不同,并且所有内容都是InRequestScope。谢谢。 – Hammerstein