C# 使用通用类型接口进行依赖项注入(IoC)、ninject、MVC3
我有个问题。当我第一次通过IRepository模式引入依赖注入(IoC)时,一切都很好。当时,我为每个存储库使用了单独的接口。现在我试图将所有接口合并到一个通用类型接口中,但现在我遇到了ninject controller Factory的问题。GetControllerInstance方法中的“强制转换时异常”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>
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;
}
}
另外,当我通过控制台应用程序使用公共类型接口的依赖项注入时,一切都很好。请发布确切的异常消息、类型和堆栈跟踪。