2011-08-02 9 views
1

我目前正在使用Ninject創建MVC3應用程序。我有兩個控制器通過Ninject注入一個存儲庫,這兩個控制器在我的本地機器上都能正常工作。只有在使用MVC 3應用程序的特定環境中獲取Ninject的「無控制器返回的錯誤」

然而,當我將它們部署到我的遠程Web服務器,我得到The IControllerFactory 'Inventory.Infrastructure.NinjectControllerFactory' did not return a controller for the name 'GetOptions'.爲一個錯誤,但只有當我打的控制器之一 - 其他作品的罰款。有什麼我在這裏做錯了嗎?我對Ninject和DI相當陌生,所以如果還有其他方法我應該繼續討論,請告訴我。謝謝!

這裏是我的控制器廠

public class NinjectControllerFactory : DefaultControllerFactory 
{ 
    private IKernel ninjectKernel; 

    public NinjectControllerFactory() 
    { 
     ninjectKernel = new StandardKernel(); 
     AddBindings(); 
    } 

    protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) 
    { 
     return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType); 
    } 

    private void AddBindings() 
    { 
     ninjectKernel.Bind<IVehicleRepository>().To<EFVehicleRepository>(); 
    } 
} 

在的Application_Start我:

ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory()); 

而在去年,我的控制器是

public class InventoryAPIController : Controller 
{ 
    IVehicleRepository repository; 

    public InventoryAPIController(IVehicleRepository repo) 
    { 
     repository = repo; 

    } 
} 

public class VehicleController : Controller 
{ 


    IVehicleRepository repository; 

    public VehicleController(IVehicleRepository repo) 
    { 
     repository = repo; 
    } 
} 

回答

2

嘗試使用在nuget上找到的Ninject.MVC3而不是您的自定義控制器工廠。它使用DependencyResolver而不是ControllerFactory,這是MVC3的首選方式。

+0

啊我沒有意識到有一個MVC3特定版本,明天會試試,謝謝! – codechinchilla

+0

它的工作原理!再次感謝。 – codechinchilla

相關問題