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.asax
或session_Start
方法
恐怕你必須添加代碼,讓您的內核並調用session_start方法 –
所以內部解決方法沒有辦法避免的服務定位?我只是現在嘗試一個服務定位器的方式,它的工作正常,但並不那麼幹淨... –
我不是很熟悉Ninject的實現,但我怕注射不適用於一些與asp.net相關的對象,並且HttpApplication就在這個列表中,因爲這是一個允許在所有依賴項中注入的入口點,但本身不是。您可能需要檢查Ninject的來源,以證明這一點。 –