我创建了一个通用接口和一个通用的repo。我试图利用现有架构中的这些泛型来改进和简化我的依赖注入实现。
绑定在没有泛型实现的情况下工作。 我似乎无法找到我出错的地方。
以下是我尝试使用Ninject实现这些泛型的方法。
我收到的错误是:
///错误讯息: 无法转换类型' DataRepository'的对象输入' IDataRepository'。
这是通用的repo和接口
//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和界面
//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)方法中的类。 我尝试了几种绑定方式,但我继续收到&#34;无法投射对象类型......&#34;错误。
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>>();
}
有没有人看到任何导致此问题我做错的事情?
答案 0 :(得分:2)
问题在于public class DataRepository : GenericRepository<MainSearchResult>, IDataRepository
{
...
不是从import xml.etree.cElementTree as ET
for event, element in ET.iterparse('huge.xml'):
if event == 'end' and element.tag == 'ticket':
#process ticket...
继承。
这样的事应该没问题:
{{1}}