存储库、工作单元和 Unity
当我“新建”一个需要依赖项的对象(即存储库、UnitOfWork)时,使用 Unity 一切都很棒,我的新对象获得注入的依赖项,并且“新建”对象可以控制 UnitOfWork、存储库,因为它们也需要 UnitOfWork 依赖项也使用相同的 UnitOfWork 进行注入(使用 PerResolve 生命周期管理器)。
一切都很好,但是我有一个问题是这个 UnitOfWork 和存储库的范围是在类级别。
如果我希望在方法级别控制 UnitOfWork 的生命周期,我应该如何处理?我应该使用方法注入吗?如果是这样,我的方法是否应该再次获取所有必需的依赖项,即存储库和 UnitOfWork ?
一些指导将不胜感激。
Using Unity when I 'new up' an object that requires dependencies i.e. Repositories, UnitOfWork all is great, my new object gets the dependencies injected and the 'newed' up object has control over the UnitOfWork, the repositories as they also require a UnitOfWork dependency get injected too, with the same UnitOfWork (using PerResolve lifetime manager).
All's good, however where I have an issue is the scope of this UnitOfWork and Repositories are at the class level.
What if I would like the lifetime of the UnitOfWork to be controlled at the method level, how should I approach this ?? Should I be using method injection ? If so should my method be taking all the required dependencies i.e. Repositories and UnitOfWork again ??
Some guidance would be greatly appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
实际上,根据每个请求保留工作单元(用 DbContext 包装)。如果您明智地使用方法,这将是一个昂贵的解决方案。例如,
我们在单一方法中使用 4 个不同的数据库连接,也不能安全地使用事务。用户每个请求的基本工作单元可以作为容器使用HttPContext。
Actually, Keep unit of work (wrap with DbContext) per request basis. If you use method wise it will be a costly solution. For example,
We are using 4 different connections to the database in a single method also not safe use of transactions. User per request base unit of work can as a container you can use HttPContext.
您不应该使用 DI 作为方法参数,至少不应该直接使用。
通常的方法是使用 IUnitOfWorkFactory 或类似的方法。将那个从容器中取出。然后在您的方法中调用工厂来获取您的工作单元对象。工厂可能(也可能不会)返回容器来完成工作。
You shouldn't be using DI for method parameter, at least not directly.
The usual approach is to have an IUnitOfWorkFactory or some such. Get that out of the container. Then in your method call the factory to get your unit of work object. The factory may (or may not) go back to the container to do it's work.
在 StackOverflow 上搜索似乎建议从此处的 MVC 项目中提取 Http 请求生命周期管理器:
http://mvcunity。 codeplex.com/
由于 Unity 本身没有自己的 Http 请求生命周期管理器。
其他问题:
如何使用 unity 2.0 和 asp.net mvc 为每个 http 请求(或每个 http 上下文)注入依赖项
使用 ASP.NET 会话进行生命周期管理 (Unity)
Having a search on StackOverflow seems to suggest to pull the Http Request Lifetime Manager from the MVC project here:
http://mvcunity.codeplex.com/
Since Unity itself does not have it's own Http Request Lifetime Manager.
Other Questions:
How to inject dependencies per http request (or per http context) with unity 2.0 and asp.net mvc
Using ASP.NET Session for Lifetime Management (Unity)