У меня есть веб-приложение ASP.Net, которое использует Ninject 2.2.0.0
У меня есть HTTPHandler, который наследуется от класса Microsoft.Web.ImageHandler.
В нем мне нужно получить доступ к экземпляру класса обслуживания, который я создал.
потому что я не могу наследовать от Ninject.Web.HttpHandlerBase, я подумал, что просто выставлю ядро как свойство класса Global.asax ...
protected override IKernel CreateKernel()
{
IKernel kernel = new StandardKernel(new DefaultModule());
var sms = kernel.Get<SiteMapService>();
SiteMapSvc = sms;
Kernel = kernel;
return kernel;
}
public IKernel Kernel
{
get; set;
}
и используйте метод kernel.Get для получения службы ..
var global = (Global) HttpContext.Current.ApplicationInstance;
var service = global.Kernel.Get<PhotoService>();
Это терпит неудачу со следующим ...
[ArgumentNullException: Cannot be null
Parameter name: root]
Ninject.ResolutionExtensions.GetResolutionIterator(IResolutionRoot root, Type service, Func`2 constraint, IEnumerable`1 parameters, Boolean isOptional, Boolean isUnique) in c:\Projects\Ninject\ninject\src\Ninject\Syntax\ResolutionExtensions.cs:258
Ninject.ResolutionExtensions.Get(IResolutionRoot root, Type service, IParameter[] parameters) in c:\Projects\Ninject\ninject\src\Ninject\Syntax\ResolutionExtensions.cs:151
Thumb.GenerateImage(NameValueCollection parameters) in \Thumb.ashx.cs:40
UPDATE:
Мне удалось это исправить, изменив для этого свойство Global.Kernel, но теперь я попадаю на территорию против паттернов ...
public IKernel Kernel
{
get { return this.CreateKernel(); }
}
Теперь прочитаем и посмотрим, что это значит ..