Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用通用类型接口进行依赖项注入(IoC)、ninject、MVC3_C#_Asp.net Mvc_Dependency Injection_Repository_Ninject - Fatal编程技术网

C# 使用通用类型接口进行依赖项注入(IoC)、ninject、MVC3

C# 使用通用类型接口进行依赖项注入(IoC)、ninject、MVC3,c#,asp.net-mvc,dependency-injection,repository,ninject,C#,Asp.net Mvc,Dependency Injection,Repository,Ninject,我有个问题。当我第一次通过IRepository模式引入依赖注入(IoC)时,一切都很好。当时,我为每个存储库使用了单独的接口。现在我试图将所有接口合并到一个通用类型接口中,但现在我遇到了ninject controller Factory的问题。GetControllerInstance方法中的“强制转换时异常” public interface IRepositoryEF<TAble> where TAble: class { IQueryable<TAble>

我有个问题。当我第一次通过IRepository模式引入依赖注入(IoC)时,一切都很好。当时,我为每个存储库使用了单独的接口。现在我试图将所有接口合并到一个通用类型接口中,但现在我遇到了ninject controller Factory的问题。GetControllerInstance方法中的“强制转换时异常”

public interface IRepositoryEF<TAble> where TAble: class
{
    IQueryable<TAble> GetAll();

    void Add(TAble);

    TAble GetById(long id);

    TAble DeleteById(long id);
}
public interface MealsRepositoryEF: IRepositoryEF<Meal>
{
     IQueryable<Meal> GetAllAsQueryable()
     {
     }
     void Add(Meal meal)
     {
     }
     Meal GetById(long id)
     {
     }
     Meal DeleteById(long id)
     {
     }
}
public interface GoalsRepositoryEF: IRepositoryEF<Goal>
{
    IQueryable<Goal> GetAllAsQueryable()
    {
    }
    void Add(Goal goal)
    {
    }
    Patient GetById(long id)
    {
    }
    Patient DeleteById(long id)
    {
    }
}



public class NinjectControllerFactory: DefaultControllerFactory {
    private IKernel ninjectKernel;

    public NinjectControllerFactory() {
        ninjectKernel = new StandardKernel();
        AddBindings();
    }

    protected override IController GetControllerInstance(RequestContext requestContext, 
        Type controllerType)
    {
        return controllerType == null? 
            null :
            (IController)ninjectKernel.Get(controllerType);         
    }

    private void AddBindings() {
        // put additional bindings here
        ninjectKernel.Bind<IRepositoryEF<Meal>>().To(typeof(MealsRepositoryEF));
        ninjectKernel.Bind<IRepositoryEF<Goal>>().To(typeof(GoalsRepositoryEF));
    }
}
public class MealsController : Controller
{
    private  IRepositoryEF<Meal> mealsRepository;

    public PatientController(IRepositoryEF<Meal> repo)
    {
        mealsRepository= repo;
    }
}
公共接口IRepositoryEF,其中表:类
{
IQueryable GetAll();
空加(表);
表GetById(长id);
表DeleteById(长id);
}
公共接口MealsRepositoryEF:IRepositoryEF
{
IQueryable GetAllAsQueryable()
{
}
空加(餐)
{
}
膳食GetById(长id)
{
}
膳食删除id(长id)
{
}
}
公共接口GoalsRepositoryEF:IRepositoryEF
{
IQueryable GetAllAsQueryable()
{
}
无效添加(目标)
{
}
患者GetById(长id)
{
}
患者删除id(长id)
{
}
}
公共类NinjectControllerFactory:DefaultControllerFactory{
私有IKernel-Ninject内核;
公共控制器工厂(){
ninjectKernel=新的标准内核();
AddBindings();
}
受保护的重写IController GetControllerInstance(RequestContext RequestContext,
类型控制器类型)
{
返回控制器类型==null?
无效的:
(IController)ninjectKernel.Get(controllerType);
}
私有void AddBindings(){
//在此处添加其他绑定
Bind()到(typeof(MealsRepositoryEF));
Bind().To(typeof(GoalsRepositoryEF));
}
}
公共类MealsController:控制器
{
私有IRepositoryEF测量存储库;
公共患者控制员(IRepositoryEF repo)
{
mealsRepository=repo;
}
}

另外,当我通过控制台应用程序使用公共类型接口的依赖项注入时,一切都很好。请发布确切的异常消息、类型和堆栈跟踪。