我試圖用Bootstrapper with Ninject。我已經安裝了Ninject.MVC3
從的NuGet初始化我Ninject容器和我創建了一個測試模塊是這樣的:引導程序不加載我NinjectModules
public class TestNinjectModule : NinjectModule
{
public override void Load()
{
Bind<DBEntities>().ToSelf().InRequestScope();
Bind(typeof(IGenericRepository<>))
.To(typeof(GenericRepository<>)).InRequestScope();
Bind<ISystemRepository>().To<SystemRepository>().InRequestScope();
Bind<IUnitOfWork>().To<UnitOfWork>();
}
}
我也包括在我Global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Bootstrapper.With.Ninject().Start();
Bootstrapper.With.AutoMapper().Start();
}
}
的Start()
呼叫不過,我仍然得到一個ActivationException
當Ninject調用具有依賴關係的控制器時,表示我的TestNinjectModule.Load()
方法未被調用。我該如何解決這個問題?
異常消息:
錯誤激活IUnitOfWork 沒有匹配的綁定是可用的,並且類型不是自可綁定。 激活路徑:依賴IUnitOfWork的 2)注射入型的構造的參數的UnitOfWork> TreasurySystemController 1)請求SystemController
建議: 1)確保已定義IUnitOfWork的結合。 2)如果綁定是在模塊中定義的,請確保該模塊已被加載到內核中。 3)確保你沒有意外創建多個內核。 4)如果您使用構造函數參數,請確保參數名稱與>構造函數參數名稱匹配。 5)如果您正在使用自動模塊加載,請確保搜索路徑和過濾器>正確。
堆棧跟蹤:
在Ninject.KernelBase.Resolve(IRequest請求)在C:\項目\ Ninject \ ninject \ SRC \ Ninject \ KernelBase.cs:線359 在Ninject.Planning 。目標
1.GetValue(Type service, IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:line 197 at Ninject.Planning.Targets.Target
1.在C:\ Projects \ Ninject \ ninject \ src \ Ninject \ Planning \ Targets \ Target.cs中設置ResolveWithin(IContext父級):第165行 at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context ,ITarget靶)在C:\項目\ Ninject \ ninject \ SRC \ Ninject \激活\提供商\ StandardProvider.cs:線114 在Ninject.Activation.Providers.StandardProvide河<> C_ DisplayClass4.b _2(ITarget目標)在C:\項目\ Ninject \ ninject \ SRC \ Ninject \激活\提供商\ StandardProvider.cs:在System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext() at System.Linq.Buffer
1線96 ..在Ninject的c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Providers \ StandardProvider.cs:96 處的Ninject.Activation.Providers.StandardProvider.Create(IContext上下文)中的ctor(IEnumerable1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable
1源) 。 Activation.Context.Resolve(c)中:\項目\ Ninject \ ninject \ SRC \ Ninject \激活\ Context.cs:在Ninject.KernelBase線157 。 <> C_ DisplayClass10.b _c(IBinding結合)在C:\項目\ Ninject \ ninject \ SRC \ Ninject \ KernelBase.cs:在System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable
1個源) 在Ninject線386 。 Web.Mvc.NinjectDependencyResolver.GetService(類型的serviceType)在C:\項目\ Ninject \ ninject.web.mvc \ MVC3 \ SRC \ ninject.Web.Mvc \ NinjectDependencyResolver.cs:線56 在System.Web.Mvc.DefaultControllerFactory .DefaultControllerActivator。創建(RequestContext requestContext,類型controllerType)
'ActivationException''...'當一個具有依賴關係的控制器被調用'...什麼異常?什麼叫''?我認爲你可能會跳到不成熟的結論。如果你在'Load'上放置一個斷點,會發生什麼?當您在激活失敗時檢查內核時,您會看到什麼? –
@RubenBartelink ActivionException是Ninject無法解析依賴關係時拋出的異常。當我在我的'Application_Start()'和'CreateKernel()'(在通過安裝'Ninject.MVC3' nuget包創建的'NinjectWebCommon'類中)中放置斷點時,會創建**兩個**內核,一個沒有我的綁定被激活來解決依賴關係。這就是爲什麼我得到例外 – rexcfnghk
TL; DR - 你沒有回答我的問題,這就是爲什麼沒人回答你的問題。我知道ActivationException和其他許多人做了什麼。我的意思是一個完整的StackTrace(它不一定是20頁),而且Message增加了很多。 2個內核用於2個HttpApplications。你的Load()被擊中了嗎?在沒有綁定的情況下,對於內核發生的失敗決定[我們沒有堆棧跟蹤](當你告訴調試器斷開第一次機會時)。 –