gpt4 book ai didi

c# - 如何通过 Ninject 使用泛型将接口(interface)绑定(bind)到类?

转载 作者:行者123 更新时间:2023-11-30 23:26:07 51 4
gpt4 key购买 nike

我创建了一个通用接口(interface)和一个通用存储库。我正在尝试将这些泛型与我现有的架构一起使用,以改进和简化我的依赖注入(inject)实现。

绑定(bind)在没有泛型实现的情况下工作。我似乎找不到哪里出错了。

下面是我如何尝试使用 Ninject 实现这些泛型。

我收到的错误是:

///Error message: Unable to cast object of type 'DataRepository' to type 'IDataRepository'.

这是通用的 repo 和接口(interface)

//generic interface
public interface IGenericRepository<T> where T : class
{
IQueryable<T> GetAll();
IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);
void Add(T entity);
void Delete(T entity);
void Edit(T entity);
void Save();
}


//generic repo
public abstract class GenericRepository<T> : IGenericRepository<T> where T : class
{
////removed the implementation to shorten post...

我在这里创建了使用泛型的 repo 和接口(interface)

//repo
public class DataRepository : GenericRepository<IDataRepository>
{
public IQueryable<MainSearchResult> SearchMain(){ //.... stuff here}
}

//interface
public interface IDataRepository : IGenericRepository<MainSearchResult>
{
IQueryable<MainSearchResult> SearchMain(){ //.... stuff here}
}

在 ../App_Start 下的静态类 NinjectWebCommon 中,我在 RegisterServices(IKernel kernel) 方法中绑定(bind)类。 我尝试了多种绑定(bind)方式,但仍然收到“无法转换对象类型...”错误。

    private static void RegisterServices(IKernel kernel)
{
// current failed attempts
kernel.Bind(typeof(IGenericRepository<>)).To(typeof(GenericRepository<>));
kernel.Bind(typeof(IDataRepository)).To(typeof(DataRepository));

// failed attempts
//kernel.Bind<IDataRepository>().To<GenericRepository<DataRepository>>();
//kernel.Bind<IDataRepository>().To<GenericRepository<DataRepository>>();
}

有没有人看到我做错了什么会导致这个问题?

最佳答案

问题是 DataRepository 没有继承自 IDataRepository

像这样应该没问题:

public class DataRepository : GenericRepository<MainSearchResult>, IDataRepository
{
...

关于c# - 如何通过 Ninject 使用泛型将接口(interface)绑定(bind)到类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36990151/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com