2
這是一個MVC應用程序,其中控制器需要構造函數中的DataContextCreator
和CustomerID
。我ControllerFactory
樣子:使用Ninject將參數傳遞給控制器構造函數
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel();
AddBindings();
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
return null;
}
else
{
string customerID = requestContext.HttpContext.Session["CustomerID"].ToString();
return (IController)ninjectKernel.Get(controllerType, new IParameter[]{new Parameter("CustomerID", customerID, true)});
}
}
private void AddBindings()
{
ninjectKernel.Bind<IDataContextCreator>().To<DefaultDataContextCreator>();
}
}
我收到以下錯誤導航到該頁面即觸發控制器創建時:
Ninject.ActivationException: Error activating int
No matching bindings are available, and the type is not self-bindable.
Activation path:
2) Injection of dependency int into parameter CustomerID of constructor of type MyController
1) Request for MyController
上述所有的在Win 7使用MVC3 .NET 4中。 謝謝你的幫助。
謝謝。我確實執行過你的步驟,但是我無法在'NinjectWebCommon'中找到任何中斷點,例如在'Start()'方法中。可以肯定的是,我刪除了'NinjectControllerFactory',安裝了'Ninject.MVC3'並獲得了'App_Start/NinjectWebCommon.cs'文件。然後我編輯了上面的'RegisterServices()'方法 - 但是我得到了同樣的錯誤。然後我發現'NinjectWebCommon'沒有被調用到任何地方? –
當您第一次運行應用程序時,應該調用Start方法。 –
我在哪裏調用'Start()'方法?我首先嚐試在Application_Start()中調用它。這工作,但我得到了異常'InvalidOperationException'穿過本機/管理的邊界 此方法只能在應用程序的預啓動初始化階段調用。 我接下來意識到我可能需要一個'NinjectHttpApplication'。所以我做了如[鏈接](https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application)所示的設置。在這裏我得到的例外:'System.InvalidOperationException':序列不包含任何元素 –