asp.net-web-api - 参数化的 MVC6 WebApi 构造函数不使用 Ninject 调用
问题描述
我正在使用 MVC6-WebApi 参数化构造函数未调用。我在下面的参考资料中引用了 Ninject。
http://sudiptachaudhari.com/dependency-injection-aspnet-webapi/
WebApi 控制器
public class EmployeeController : ApiController
{
private IEmployeeDetailRepository _IEmployeeDetailRepository;
public EmployeeController() { }
public EmployeeController(IEmployeeDetailRepository IEmployeeDetailRepository)
{
_IEmployeeDetailRepository = IEmployeeDetailRepository;
}
public JsonResult<List<EmployeeDetailDTO>> GetAllEmployees()
{
var list = _IEmployeeDetailRepository.EmployeeList().ToList();
return Json<List<EmployeeDetailDTO>>(list);
}
}
不调用以下参数化构造
公共 EmployeeController(IEmployeeDetailRepository IEmployeeDetailRepository)
我不明白出了什么问题。
在 App_Start 下的 NinjectResolver 类中
public class NinjectResolver : IDependencyResolver
{
private IKernel kernel;
public NinjectResolver() : this(new StandardKernel())
{
}
public NinjectResolver(IKernel ninjectKernel, bool scope = false)
{
kernel = ninjectKernel;
if (!scope)
{
AddBindings(kernel);
}
}
private void AddBindings(IKernel kernel)
{
// singleton and transient bindings go here
}
private IKernel AddRequestBindings(IKernel kernel)
{
kernel.Bind<IEmployeeDetailRepository>().To<EmployeeDetailRepository>().InSingletonScope();
return kernel;
}
public IDependencyScope BeginScope()
{
return new NinjectResolver(AddRequestBindings(new ChildKernel(kernel)), true);
}
public void Dispose()
{
}
public object GetService(Type serviceType)
{
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return kernel.GetAll(serviceType);
}
WebApi 配置类
[ExcludeFromCodeCoverage]
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.DependencyResolver = new NinjectResolver();
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Global.asax 类
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Mapper.Initialize(cfg => cfg.AddProfile<AutoMapperEmployeeProfile>());
}
解决方案
推荐阅读
- css - 特定于 Div 的元素样式
- authentication - Hyperledger Composer REST 服务器钱包不是唯一的
- java - 通过使用延迟函数调用来避免使用回调的反模式的名称是什么?
- c - 在有序链表中插入一个元素
- javascript - 有没有更好的方法来编写这个 switch 语句 javascript
- android - Kotlin Android Spinner 在加载时使应用程序崩溃
- c - 当目标没有足够的空间时使用`strcat()`的正确方法?
- amazon-web-services - CloudWatch:一些指标需要计算所有时间,而不是一段时间
- r - 如何在 cv.glmnet 中修复不同行的错误?
- angular - Firestore - 我想动态地将 where 语句添加到我的集合中