我在我的网络应用程序中使用了ninject.web扩展名,但现在我在解决global.asax的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
我也尝试使用NinjectWebCommon
的ninject.web的nuget包版本,但结果是相同的:未注入属性且为null
而是在我的webForm中注入的所有属性都没有问题,所以问题只出现在global.asax
或session_Start
方法
答案 0 :(得分:-1)
Property Setter Injection
以下是使用Property Setter Injection的相同Samurai类的示例。对于要注入的属性,必须使用[Inject]注释。
class Samurai
{
[Inject]
public IWeapon Weapon { private get; set; }
public void Attack(string target)
{
this.Weapon.Hit(target);
}
}
答案 1 :(得分:-2)
尝试删除Global.asax中的[Inject]属性