在 MVC 5 Web 应用程序中管理每个 http 请求生命周期的问题

我正在尝试为每个 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());

        }


心有法竹
浏览 187回答 1
1回答

芜湖不芜

使用RegisterType为每解决实例化:public static void RegisterTypes(IUnityContainer container){&nbsp; &nbsp; container.RegisterType<OITTimeSheetDBContextFactory>(new PerRequestLifetimeManager());&nbsp; &nbsp; container.RegisterType<UserContext>(new PerRequestLifetimeManager());}RegisterInstance 将有效地定义一个单例并始终返回对象的相同实例
打开App,查看更多内容
随时随地看视频慕课网APP