我有一个与 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) 如果您使用自动模块加载,请确保搜索路径和过滤器正确。
以下是忍者绑定:
公共类 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;
}
}