0

IAM с использованием ninject.web расширение в моем веб-приложение, но теперь у меня есть проблема reolving зависимость в методе session_start от global.asaxDependency Injection с Ninject в методе session_start веб-формы приложения

это мой global.asax

public class Global : NinjectHttpApplication 
    { 
     [Inject] 
     IUserManagement um { get; set; } 

     protected void Session_Start(object sender, EventArgs e) 
     { 

      if (WebUser.user != null) 
      {    
      if (HttpContext.Current.Session[ChiaveSessioneUtente] == null) 
      { 
       if (HttpContext.Current != null) 
        HttpContext.Current.Session.Add(ChiaveSessioneUtente, um.ResolveRequestingUser(Request));     
      }  
     } 
     protected override IKernel CreateKernel() 
     { 
      var kernel = new StandardKernel(); 
      RegisterServices(kernel); 
      return kernel; 
     } 
     private void RegisterServices(IKernel kernel) 
     { 
      var modules = new List<INinjectModule> 
      { 
       new BusinessLogicModule(), 
      }; 
      kernel.Load(modules); 
     } 
} 

Ninject модуль

public class BusinessLogicModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IBusinessInquiry>().To<BusinessInquiry>();  
     Bind<IUserManagement>().To<UserManagement>(); 
    } 
} 

, но когда я начала приложение um имеет нулевое значение, даже если через отладки я вижу, что CreateKernel выполняется перед Session_Start

я также попробовать версию NuGet пакетное ninject.web с NinjectWebCommon, но результат тот же: свойство не вводится и нулевой

вместо этого в моем WebForm все имущество впрыскивается работы без проблем , поэтому проблема только с global.asax или session_Start методом

+1

Боюсь, вам придется добавить код, чтобы получить ядро ​​и вызвать метод Resolve внутри метода session_start –

+0

так нет способа избежать локатора службы? я просто попробую теперь найти локатор службы, и он работает нормально, но не так чист ... –

+1

Я не очень хорошо знаком с реализацией Ninject, но я боюсь, что инъекция не применима к некоторым объектам, связанным с asp.net, и HttpApplication находится в этом списке, потому что это точка входа, которая допускает инъекцию во всех иждивенцах, но не сама по себе. Возможно, вам придется проверить источники для Ninject, чтобы доказать это. –

ответ

-2

попытка удалить атрибут [Inject] в Global.asax

+0

Я думаю, что если он будет добиваться этого с помощью инъекции собственности, ему нужно будет отметить собственность как общедоступную? (Я думаю, что настройка по умолчанию Ninject не связана с не публичными свойствами при вводе свойств) – adaam

+0

Adaam agry with you: –

-1

недвижимости сеттер Injection

Вот пример одного и того же самурайского класса с использованием Setterter Injection. Для свойства, которое нужно ввести, он должен быть аннотирован с помощью [Inject].

class Samurai 
{  
    [Inject] 
    public IWeapon Weapon { private get; set; } 

    public void Attack(string target) 
    { 
     this.Weapon.Hit(target); 
    } 
} 
+0

, и это то, что я делаю, если вы читаете мой код, но в session_Start просто не работает –

+0

public property –

Смежные вопросы