【发布时间】:2010-10-23 18:24:30
【问题描述】:
我有一个类定义如下;
public abstract class Repository<TEntity, TDataContext> : DisposableBaseClass
where TEntity : class
where TDataContext : DataContext, new()
{...contains Linq to SQL related functionality
在具体的子类中,我这样定义类型;
public class ConcreteRepo : Repository<LSTableClass, LSDataContext>
在下一层,我有将存储库对象作为私有变量保存的业务对象。
这很好;
private ConcreteRepo _repository;
但是,我随后将其重构为所有业务对象的父类 - 该父类包含存储库/实现 Dispose 模式以处理存储库等。
我的问题是我无法获得正确的变量声明语法。
离我最近的是;
protected Repository<Object, DataContext> _repository;
但这会产生编译错误:
“错误 1 'System.Data.Linq.DataContext' 必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法中的参数 'TDataContext'... .Repository'..."
我尝试了各种其他方法,但遇到了其他问题。
在继承这个抽象类的业务层对象中,我正在创建并使用带有强制转换的 _repository 变量;
(Repository<LSTableClass, LSDataContext>)_repository = new ConcreteRepo();
- 我认为这会很好,假设我可以在父级中获得此声明。
如果我不能让它工作,我必须在每个业务对象中声明 _repository,包含完整/具体的类型详细信息,并在每个业务对象中实现 dispose 模式以进行清理。不是世界末日,但我不想这样做。
【问题讨论】:
-
所以我理解正确的是“private ConcreteRepo _repository;”在你重构的类中吗?您希望您正在编写的类包含此存储库字段 AND 是存储库的 TEntity 类型参数吗?你重构的具体内容对我来说不是很清楚。
标签: c# generics abstract-class