【发布时间】:2015-05-11 16:33:55
【问题描述】:
这是我收到的错误消息:
"Type 'GDMServices.Controllers.DmpeController' does not have a default constructor",
我开始走这条路,因为答案似乎对几个用户有效,但我开始遇到错误,让我认为某些事情已经改变并放弃了该解决方案。错误之一是无法解析 IRequest,即使我添加了对 System.Web.Http.Services 的引用(我认为这是 MVC3 依赖项)。
我看到了几个使用 unity 的例子,但我真的想坚持使用 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 的问题仍然存在,“找不到类型或命名空间名称‘IRequest’(您是否缺少 using 指令或程序集引用?)C:\ dev\git-repo\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();
}
...
【问题讨论】:
标签: asp.net-mvc-4 asp.net-web-api architecture dependency-injection ninject