我有一个包含以下类的ASP.NET Web应用程序:
public class AppContext : IAppContext {
private readonly IDataContext _dataContext;
public AppContext(IDataContext dataContext) {
_dataContext = dataContext;
}
...
}
public class DataContext : IDataContext {
...
}
这些是使用Untity注册的,如下:
container.RegisterType<IAppContext, AppContext>(new ContainerControlledLifetimeManager());
container.RegisterType<IDataContext, DataContext>(new PerRequestLifetimeManager());
AppContext是一个单例并且在应用程序的生命周期中存在,但DataContext仅在当前请求的生命周期内存在。
但是,由于DataContext是在AppContext类的构造函数中注入的,因此它将在请求之间保持不变。这会导致问题问题,因为DataContext在请求结束后处理。我怎么能在AppContext类中注入DataContext,以便我可以检索正确的实例?
答案 0 :(得分:2)
这意味着AppContext的整个设计都是无效的,它应该按照请求生存,因为现在依赖来处理某些实际的请求数据上下文。
作为解决方案,将其拆分为包含共享逻辑的单例类,以及依赖于数据上下文和共享逻辑的逻辑类。
public class SingletonAppContext : ISingletonAppContext //as singleton
{
//Source code where no data context needed
}
public class RequestAppContext : IRequestAppContext
{
public RequestAppContext(ISingletonAppContext appContext, IDataContext dataContext)
{
}
//Source code where data context is needed
}