Reputation: 856
I am Using MVC6- WebApi Parameterized constructor not calling. I referenced Ninject the below reference.
http://sudiptachaudhari.com/dependency-injection-aspnet-webapi/
WebApi Controller
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);
}
}
Not calling below parameterized construction
public EmployeeController(IEmployeeDetailRepository IEmployeeDetailRepository)
I don't understand what is wrong.
In the NinjectResolver class under the App_Start
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 Configuration Class
[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 class
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>());
}
Upvotes: 1
Views: 119