CastleWindsor LifestylePerWebЗапрос не работает - PullRequest
0 голосов
/ 19 июня 2019

Я использую 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

Кто-нибудь когда-либо сталкивался с такой же проблемой?

1 Ответ

1 голос
/ 19 июня 2019

Наконец меня осенило, что происходит. По умолчанию объекты в CastleWindsor равны Singletons.

Мои объекты репо / сервиса ссылались на мои объекты Оуэна. Поскольку они сами были Singletons, мои ссылки вели себя как Singletons.

Было бы неплохо, если бы где-нибудь было предупреждение, в котором говорилось бы об этом.

По сути, все объекты, которые ссылаются на объект, имеющий LifestylePerWebRequest(), должны, очевидно, сами реализовывать LifestylePerWebRequest().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...