单例注入一个 class ,它在请求的生命周期内持续存在

Singleton injecting a class which persists for the lifetime of the request

我有一个 ASP.NET 网络应用程序,其中 classes:

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 的构造函数中 class,它将在请求中持久化。这会导致问题,因为 DataContext 在请求结束后被释放。我怎样才能在 AppContext class 中注入 DataContext 以便检索正确的实例?

这意味着 AppContext 的整个设计是无效的,它应该根据请求存在,因为它 现在取决于 一些实际的请求数据上下文。

作为解决方案,将其拆分为包含共享逻辑的单例 class 和包含依赖于数据上下文和共享逻辑的逻辑的 class。

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
}