0

我有一个与 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;
    }

}
4

0 回答 0