1

這是錯誤消息我得到:錯誤獲取Ninject和的WebAPI V1(MVC4)工作

"Type 'GDMServices.Controllers.DmpeController' does not have a default constructor", 

我開始走這條路的答案出現了幾個用戶的工作,但我開始這些錯誤讓我覺得有些事情已經改變,並放棄了這個解決方案其中一個錯誤是無法解析IRequest,即使在我添加了對System.Web.Http.Services(我認爲是MVC3依賴項)的引用之後。

Ninject and ASP.NET Web API

我看到一對夫婦的例子使用的統一,但我真的想堅持Ninject。

控制器:

public class DmpeController : ApiController 
{ 
    private readonly Logger _logger; 
    private readonly IDmpeService dmpeService; 

    public DmpeController(Logger logger, IDmpeService service) 
    { 
     this._logger = logger; 
     this.dmpeService = service; 
    } 

    ..... 

在App_Start文件夾,從產生的NinjectWebCommons.cs的NuGet安裝:

//The class is untouched from generated form except the RegisterServices method where I added my bindings: 

    private static void RegisterServices(IKernel kernel) 
    { 
     kernel.Bind<IAppSettings>().To<AppSettings>(); 
     kernel.Bind<IDmpeService>().To<DmpeService>(); 
    }   

[更新]還要說明一點,我卡與.net 4.0所以我無法升級任何軟件包。

所以我回來嘗試上面引用的修復和IRequest的問題依然存在,「無法找到類型或命名空間名稱'IRequest'(你是否缺少using指令或程序集引用?)C: \ dev的\混帳回購\ GDM.Data \ GDMServices \ SERVICES \ App_Start \ NinjectWebCommon.cs」。我按規定安裝了Ninject.MVC3,但無濟於事。

public class NinjectScope : IDependencyScope 
{ 
    protected IResolutionRoot resolutionRoot; 
    public NinjectScope(IResolutionRoot kernel) 
    { 
     resolutionRoot = kernel; 
    } 
    public object GetService(Type serviceType) 
    { 
     IRequest request = resolutionRoot.CreateRequest(serviceType, null, new Parameter[0], true, true); 
     return resolutionRoot.Resolve(request).SingleOrDefault(); 
    } 
    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     IRequest request = resolutionRoot.CreateRequest(serviceType, null, new Parameter[0], true, true); 
     return resolutionRoot.Resolve(request).ToList(); 
    } 
    ... 

回答

1

你的問題的第一部分是對的,但你的DmpeController取決於Logger和你不註冊該相關性。請更新您的RegisterServices以註冊該依賴關係,它將起作用。

我想NInject可以處理具體類型的註冊和解析。如果這是不可能的,請提取​​接口,並使構造函數依賴於​​而不是根據具體類型Logger