我有一個ASP.Net web表單的應用程序,其使用Ninject 2.2.0.0訪問Ninject Kernel.Get()從HttpHandler的與現有的定製基
我具有從Microsoft.Web.ImageHandler類繼承的HttpHandler的。
其中我需要訪問我創建的服務類的實例。
,因爲我無法從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屬性來此解決這一問題,但我現在進入anti pattern territory ...
public IKernel Kernel
{
get { return this.CreateKernel(); }
}
現在會讀,看看這是什麼意思..
它確實看起來像一個黑客,這是肯定的。感謝指向KernelContainer的指針。在這裏花一些時間。 – Baldy 2011-04-03 08:23:30
我開始相信IoC容器是一種反模式... – garryp 2015-05-08 08:51:50
編譯時間的損失檢查我的應用程序的能力缺失它需要運行的主要部分似乎是一個非常沉重的代價,以減少耦合。 – 2016-04-13 18:20:14