«Глобально» разрешающая служба больше не вводит свойства - PullRequest
0 голосов
/ 05 января 2019

В моем шаблоне asp для проекта MVC под названием "Ks"

Вызывает webapi, ioc разрешает KsSession для соответствующего экземпляра производного класса, как отмечено здесь

Но проблема начинается, когда я пытался разрешить службу MobileUserService без внедрения, но "глобально", как показано ниже. От второго звонка KsSession больше не разрешается. Бывает, что наборы свойств вызывают вызовы от конструктора к NullKsSession, но больше не вводят свойства.

В Global.asax:

protected override void Application_BeginRequest(object sender, EventArgs e)
{
    base.Application_BeginRequest(sender, e);
    var service = Ks.Dependency.IocManager.Instance.Resolve<Service.MobileUser.IMobileUserService>();
}

У меня вопрос, почему это происходит, разве не стоит так использовать службу?

Примечание. Я добавил огромные детали в выпуск github , но здесь есть краткая версия происходящего.

1 Ответ

0 голосов
/ 06 января 2019

Похоже, вы применили плохую практику. Я бы зарегистрировал IMobileUserServie как синглтон. И решить это формально. В любом случае, для вашего вопроса, попробуйте создать новую область видимости и разрешить интерфейс в своей области видимости. Хотя я не рекомендую это, вы можете использовать следующий код

protected override void Application_BeginRequest(object sender, EventArgs e)
{
    base.Application_BeginRequest(sender, e);
    var iocResolver = Ks.Dependency.IocManager.Instance.Resolve<IIocResolver>();
    var scope = iocResolver.CreateScope();
    var service = scope.Resolve<Service.MobileUser.IMobileUserService>();
}
...