2016-09-07 30 views
0

IAM使用ninject.web擴展在我的Web應用程序,但現在我有reolving在Global.asax中依賴注入與Ninject在Web表單應用程序的方法,在session_start

的在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

執行我也嘗試ninject.web的NuGet包版本NinjectWebCommon但結果是一樣的:屬性沒有注入是空

,而不是在我的WebForm的全部財產注入作品沒有問題,所以問題是隻與global.asaxsession_Start方法

+1

恐怕你必須添加代碼,讓您的內核並調用session_start方法 –

+0

所以內部解決方法沒有辦法避免的服務定位?我只是現在嘗試一個服務定位器的方式,它的工作正常,但並不那麼幹淨... –

+1

我不是很熟悉Ninject的實現,但我怕注射不適用於一些與asp.net相關的對象,並且HttpApplication就在這個列表中,因爲這是一個允許在所有依賴項中注入的入口點,但本身不是。您可能需要檢查Ninject的來源,以證明這一點。 –

回答

-2

儘量去除[進樣]屬性Global.asax中

+0

我認爲如果他以財產注入的方式實現這一目標,他還需要將該財產標記爲公共? (我認爲Ninject的默認配置不是在進行屬性注入時綁定非公共屬性) – adaam

+0

Adaam和你協商: –

-1

屬性Setter注入

以下是使用屬性設置器注入的相同Samurai類的示例。對於要注入的屬性,必須使用[Inject]進行註釋。

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

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

這就是我所做的,如果你閱讀我的代碼,但在session_Start中根本不起作用 –

+0

公共屬性 –