c# - I'm using ninject 3.0 and asp.net mvc 3. I get the error rror activating IProductRepository -
i new mvc im fallowing book example. when run program gives me error: error activating iproductrepository no matching bindings available, , type not self-bindable. activation path...
i have read bunch of articles , other error 1 none of them helped. why happening if same in book example? please appreciated.
public class ninjectcontrollerfactory : defaultcontrollerfactory { private ikernel ninjectkernel; public ninjectcontrollerfactory() { ninjectkernel = new standardkernel(); } protected override icontroller getcontrollerinstance(requestcontext requestcontext, type controllertype) { return controllertype == null ? null : (icontroller)ninjectkernel.get(controllertype); } private void addbindings() { ninjectkernel.bind<iproductrepository>().to<efproductrepository>(); } } global.asax.cs
protected void application_start() { arearegistration.registerallareas(); registerglobalfilters(globalfilters.filters); registerroutes(routetable.routes); controllerbuilder.current.setcontrollerfactory(new ninjectcontrollerfactory()); } iproductrepository.cs
public interface iproductrepository { iqueryable<product> products { get; } } efproductrepository.cs
public class efproductrepository : iproductrepository { private efdbcontext context = new efdbcontext(); public iqueryable<product> products { { return context.products; } } } public class efdbcontext : dbcontext { public dbset<product> products { get; set; } } productcontroller.cs
public class productcontroller : controller { private iproductrepository repository; public productcontroller(iproductrepository repoparam) { repository = repoparam; } public viewresult list() { return view(repository.products); } }
change method accept ikernel parameter:
private void addbindings(ikernel kernel) { kernel.bind<iproductrepository>().to<efproductrepository>(); } then mike suggests call ninjectcontrollerfactory constructor method:
public ninjectcontrollerfactory() { ninjectkernel = new standardkernel(); addbindings(ninjectkernal); }
Comments
Post a Comment