Web表单应用的Session_Start方法中的Ninject依赖注入

时间:2016-09-07 09:13:50

标签: c# asp.net dependency-injection ninject ninject-extensions

我在我的网络应用程序中使用了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.asaxsession_Start方法

2 个答案:

答案 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]属性