Я использую CastleWindsor
, чтобы сделать IOC
в приложении ASP.NET 5.
Я столкнулся с проблемой, из-за которой я не могу правильно заставить LifestylePerWebRequest
работать в одном из моих проектов.
У меня примерно следующий код:
container.Register(Classes.FromThisAssembly()
.Pick()
.If(t => t.Name.EndsWith("Controller"))
.Configure(configurer => configurer.Named(configurer.Implementation.Name))
.LifestylePerWebRequest(),
Component.For<IAppSettings>().Instance(AppSettings.Instance).LifestyleSingleton(),
Component.For<IUserRepository>().ImplementedBy<UserRepository>(),
Component.For<IUserService>().ImplementedBy<UserService>(),
//all my other services/repos
//and then
Component.For<IOwinContext>().ImplementedBy<IOwinContext>()
.UsingFactoryMethod(o => HttpContext.Current.GetOwinContext(), true)
.LifestylePerWebRequest(),
Component.For<IAuthenticationManager>().ImplementedBy<IAuthenticationManager>()
//Line below only gets called once (when the first request is made), should be called for each new request...
.UsingFactoryMethod(o => o.Resolve<IOwinContext>().Authentication, true)
.LifestylePerWebRequest()
);
В соответствии с именем, которое я ожидаю, поведение LifestylePerWebRequest()
будет вызывать фабричный метод каждый раз, когда на сервер отправляется новый запрос. Тем не менее, мои фабричные методы вызываются только один раз (при первом запросе).
Я также проверил, что модуль CastleWindsor загружен и может видеть __DynamicModule_Castle.Facilities.AspNet.SystemWeb.PerWebRequestLifestyleModule, Castle.Facilities.AspNet.SystemWeb, Version=5.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc_aad31f05-1937-4d39-b48f-3b2b7344d750
Кто-нибудь когда-либо сталкивался с такой же проблемой?