У меня есть класс, определенный следующим образом:
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>
На следующем уровне у меня есть бизнес-объекты, которые хранят объект Repository в качестве закрытой переменной.
Это было хорошо;
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 в каждом из них, чтобы прояснить ситуацию. Не конец света, но я бы не хотел.