1

我正在使用 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>());
        }
4

0 回答 0