Инъекция свойств HttpHandler с использованием Ninject, возвращающая null
2 Thomas [2010-09-02 20:12:00]
У меня есть следующий httphandler:
public class NewHandler : IHttpHandler
{
[Inject]
public IFile FileReader
{
get;
set;
}
public NewHandler()
{
}
public void ProcessRequest(System.Web.HttpContext context)
{
....
var something = SomeMethod(FileReader);
....
}
public bool IsReusable
{
get
{
return true;
}
}
}
Это мой модуль Ninject в Global.asax.
internal class ServiceModule : NinjectModule
{
public override void Load()
{
Bind<IFile>().To<FileWrapper>().InSingletonScope();
}
}
Каждый раз, когда обработчик срабатывает, FileReader имеет значение NULL. Я что-то упускаю? Правильно ли это сделать инъекцию свойств с помощью Ninject?
Спасибо
ninject asp.net-mvc-2 ninject-2
1 ответ
3 Решение Necros [2010-09-02 20:41:00]
Это правильный способ сделать инъекцию свойств с помощью Ninject, но это не сработает. Вероятно, вы используете что-то вроде класса NinjectMvcApplication
в качестве базового класса для вашего приложения, которое обрабатывает инъекцию зависимостей для контроллеров и все контроллеры могут использовать (службы, репозитории). Но HttpHandlers не создаются ControllerFactory
, поэтому ничто не заботится о том, чтобы вводить материал.
Может быть, есть лучший способ сделать это, но я использовал локатор службы, чтобы разрешить зависимость. См. http://code.dortikum.net/2010/08/05/asp-net-mvc-di-with-common-service-locator-and-ninject/.
UPDATE:
Попробуйте что-то вроде этого:
public class NewHandler : IHttpHandler
{
private readonly IFile _fileReader;
public NewHandler()
{
_fileReader = ServiceLocator.Current.GetInstance<IFile>();
}
public void ProcessRequest(System.Web.HttpContext context)
{
....
var something = SomeMethod(_fileReader);
....
}
public bool IsReusable
{
get
{
return true;
}
}
}