这是我收到的错误消息:
"Type 'GDMServices.Controllers.DmpeController' does not have a default constructor",
我开始沿着这条路走下去,因为答案似乎适用于几个用户,但我开始收到错误,这让我觉得有些事情发生了变化并放弃了解决方案。其中一个错误是无法解析IRequest,即使我添加了对System.Web.Http.Services的引用(我认为它是MVC3依赖项)。
我看到了几个使用统一的例子,但我真的想坚持使用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文件夹中,从nuget安装生成的NinjectWebCommons.cs:
//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的问题仍然存在,&#34;类型或命名空间名称&#39; IRequest&#39;找不到(你是否缺少using指令或程序集引用?)C:\ dev \ git-repo \ GDM.Data \ GDMServices \ Services \ App_Start \ NinjectWebCommon.cs&#34;。我没有按照规定安装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();
}
...
答案 0 :(得分:1)
您问题的第一部分是正确的,但您的DmpeController
取决于Logger
而您没有注册该依赖关系。请更新您的RegisterServices
以注册该依赖项,它将起作用。
我认为NInject可以处理具体类型的注册和解析。如果不可能,请提取ILogger
接口,并使构造函数依赖于ILogger
,而不是取决于具体类型Logger
。