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
методом
Боюсь, вам придется добавить код, чтобы получить ядро и вызвать метод Resolve внутри метода session_start –
так нет способа избежать локатора службы? я просто попробую теперь найти локатор службы, и он работает нормально, но не так чист ... –
Я не очень хорошо знаком с реализацией Ninject, но я боюсь, что инъекция не применима к некоторым объектам, связанным с asp.net, и HttpApplication находится в этом списке, потому что это точка входа, которая допускает инъекцию во всех иждивенцах, но не сама по себе. Возможно, вам придется проверить источники для Ninject, чтобы доказать это. –