通用继承绑定ninject

时间:2013-10-22 02:35:38

标签: binding ninject

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

}

0 个答案:

没有答案