我正在使用CastleWindsor
在ASP.NET 5应用程序中执行IOC
。
我遇到了一个问题,我似乎无法正确地使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
有人遇到过同样的问题吗?
答案 0 :(得分:1)
终于让我意识到发生了什么事。默认情况下,CastleWindsor
中的对象是Singletons
。
我的仓库/服务对象引用了我的Owin对象。因为它们本身是Singletons
,所以我的引用就像Singletons
一样。
如果在某处有警告告知您,这将是很好的。
基本上,所有引用具有LifestylePerWebRequest()
的对象的对象本身都必须显然实现LifestylePerWebRequest()
。