【发布时间】:2017-01-25 14:58:43
【问题描述】:
我有一个包含以下类的 ASP.NET Web 应用程序:
public class AppContext : IAppContext {
private readonly IDataContext _dataContext;
public AppContext(IDataContext dataContext) {
_dataContext = dataContext;
}
...
}
public class DataContext : IDataContext {
...
}
这些是使用 Unity 注册的,如下所示:
container.RegisterType<IAppContext, AppContext>(new ContainerControlledLifetimeManager());
container.RegisterType<IDataContext, DataContext>(new PerRequestLifetimeManager());
AppContext 是一个单例并且在应用程序的生命周期中存在,但 DataContext 仅在当前请求的生命周期中存在。
但是,由于 DataContext 是在 AppContext 类的构造函数中注入的,因此它将在请求之间持久化。这会导致问题,因为 DataContext 在请求结束后被释放。如何在 AppContext 类中注入 DataContext 以便检索正确的实例?
【问题讨论】:
-
如果
AppContext有一个公共构造函数,它如何是一个signelton? -
您遇到的问题是一个常见的陷阱,通常称为Captive Dependency。
-
@ZoharPeled OP 不是在谈论Singleton Design Pattern,而是在谈论单身生活方式,这是一个常见的术语在谈到依赖注入和 IoC 容器时。
-
@Steven 谢谢,我不知道 Singleton Liststyle。
-
感谢@Steven,虽然它至少没有修复程序,但这给了我解决问题的线索。
标签: c# asp.net dependency-injection unity-container