【发布时间】:2018-08-29 13:06:42
【问题描述】:
我的应用程序使用实体框架。由于我希望我的DbContext 在单个请求中被重用,因此我将其注册为Lifestyle.Scoped,如下所示:
container.Register<MyDbContext>(Lifestyle.Scoped);
其他类得到这个MyDbContext 注入。例如,请参阅以下存储库:
ApplicationsRepository 是:
public class ApplicationsRepository : IApplicationsRepository
{
private readonly MyDbContext _dbContext;
public ApplicationsRepository(MyDbContext dbContext)
{
_dbContext = dbContext;
}
public void Save()
{
_dbContext.Save();
}
public Application GetByName(string appName)
{
var dbApplication = _dbContext.APPLICATIONS.FirstOrDefault(a => a.NAME == appName);
return ApplicationMapper.MapApplicationFromAPPLICATIONS(dbApplication);
}
}
但是还有无数其他类依赖于MyDbContext。其他类可能不直接依赖于MyDbContext,但会注入一个依赖于MyDbContext 的类。
我的问题是:我应该对这些课程使用什么样的生活方式管理以及如何实施?
【问题讨论】:
-
您的问题中有很多细节似乎与您的问题无关。如果我正确解释了您的问题,您的问题是:“我如何确定我需要哪种生活方式来上课?”。对吗?
-
是的,没错!
-
抱歉请求不正确。是现在吗??
-
请注意,您应该不在抽象上实现
IDisposable。此外,ApplicationsRepository应该不处置MyDbContext,因为 1. Simple Injector 已经这样做了,并且 2. 存储库不知道处置该依赖项是否安全。从您的类中删除该处置逻辑会大大简化它们。欲了解更多信息,请阅读:stackoverflow.com/questions/30283564/…
标签: c# dependency-injection ioc-container simple-injector