我有一个与Ninject绑定有关的问题。我对ninject很新。
我有类似的课程;
public interface irepo<T> where T : class
{
}
public class repo<T> : irepo<T> where T:class
{
}
public class itestRepo : irepo<MyClass>
{
}
public class testRepo : itestRepo
{
}
当我尝试绑定时
kernel.Bind<itestRepo>().To<testRepo>();
我收到了一个错误。但是,当我直接使用绑定时:
itestrepo repo = new testRepo();
所以,我觉得课程结构还可以
它有效。如果有人可以帮助我,那真的很棒。提前谢谢。
我添加了错误:
非常感谢您的回复。我收到的错误是:
激活ICustomerRepository
时出错没有匹配的绑定可用,并且该类型不可自我绑定。 激活路径:
2)将依赖关系ICustomerRepository注入到TestController类型的构造函数的参数repo中
1)请求TestController
建议: 1)确保已为ICustomerRepository定义了绑定。
2)如果在模块中定义了绑定,请确保已将模块加载到内核中。
3)确保您没有意外创建多个内核。
4)如果使用构造函数参数,请确保参数名称与构造函数参数名称匹配。
5)如果使用自动模块加载,请确保搜索路径和过滤器正确无误。
以下是Ninject Binding:
public class NinjectControllerFactory:DefaultControllerFactory { private IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel();
}
//To override to get the controller instance
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
}
//To add dependency bindings
private void AddBindings()
{
ninjectKernel.Bind(typeof(IRepository<>)).To(typeof(Repository<>));
ninjectKernel.Bind<ICustomerRepository>().To<CustomerRepository>();
ninjectKernel.Bind<IEventRepository>().To<EventRepository>();
}
}
以下是控制器:
public class TestController : Controller
{
//
// GET: /Agreement/
private ICustomerRepository repository;
public ActionResult Index()
{
return View();
}
public TestController(ICustomerRepository repo)
{
repository = repo;
}
}