Unity 依赖注入 - 在 MVC 5 Web 应用程序中管理每个 http 请求生命周期的问题

Unity Dependency Injection - issue managing per http request lifetime in MVC 5 web application

我正在尝试根据 HTTP 请求实现我的实例(在 Unity DI 中)的生命周期。但是当 unity 尝试注册实例时,我不断收到错误消息:“PerRequestLifetimeManager 只能在 HTTP 请求的上下文中使用。导致此错误的可能原因是在非 ASP.NET 应用程序,或在与适当的同步上下文无关的线程中使用它。"

我在 UnityMvcActivator.cs 中注册了 UnityPerRequestHttpModule,如下所示

public static void Start() 
        {
            FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
            FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(UnityConfig.Container));

            DependencyResolver.SetResolver(new UnityDependencyResolver(UnityConfig.Container));

            // TODO: Uncomment if you want to use PerRequestLifetimeManager
            Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
        }

这就是我的 UnityConfig.cs 的样子

public static void RegisterTypes(IUnityContainer container)
        {
            // TODO: Register your type's mappings here.
            container.RegisterInstance<OITTimeSheetDBContextFactory>(new OITTimeSheetDBContextFactory(), new PerRequestLifetimeManager());
            container.RegisterInstance<UserContext>(new UserContext(container.Resolve<OITTimeSheetDBContextFactory>()), new PerRequestLifetimeManager());
        }

使用 RegisterType 进行 Per Resolve 实例化:

public static void RegisterTypes(IUnityContainer container)
{
    container.RegisterType<OITTimeSheetDBContextFactory>(new PerRequestLifetimeManager());
    container.RegisterType<UserContext>(new PerRequestLifetimeManager());
}

RegisterInstance 将有效地定义一个单例并且总是 return 相同的对象实例