Ich habe eine Klasse definiert wie folgt;C# -Syntax zum Deklarieren einer Variablen eines abstrakten generischen Typs
public abstract class Repository<TEntity, TDataContext> : DisposableBaseClass
where TEntity : class
where TDataContext : DataContext, new()
{...contains Linq to SQL related functionality
In der konkreten Unterklasse definiere ich die Typen als so;
Bei der nächsten Stufe nach oben habe ich Geschäftsobjekte, die das Repository-Objekt als private Variable enthalten.
Das war in Ordnung;
private ConcreteRepo _repository;
Allerdings habe ich dann diese in eine übergeordnete Klasse für die ganze Geschäftsobjekte Refactoring - dieser übergeordneten Klasse hält die Repository/Arbeitsgeräte Muster-Repository zu entsorgen Entsorgen usw.
Mein Problem ist, dass ich nur kann die Syntax nicht richtig für die Deklaration der Variablen bekommen.
Die nächste, die ich gekommen bin, ist;
protected Repository<Object, DataContext> _repository;
aber dies gibt den Compiler-Fehler:
„Fehler 1‚System.Data.Linq.DataContext‘muss ein nicht-abstrakter Typ mit einem öffentlichen parameterlosen Konstruktor sein, um es als Parameter zu verwenden 'TDataContext' in der generischen Art oder Methode '.... Repository' ... "
Ich habe verschiedene andere Dinge ausprobiert, aber andere Probleme getroffen.
In dem Business-Schicht-Objekt, das diese abstrakte Klasse erbt, erstelle und benutze ich die Variable _repository mit einem Cast;
(Repository<LSTableClass, LSDataContext>)_repository = new ConcreteRepo();
- und ich denke, das ist in Ordnung sein wird, vorausgesetzt, ich diese Erklärung direkt im Eltern erhalten kann.
Wenn ich das nicht bekommen zu arbeiten, ich habe den _repository in jedem Business-Objekt zu erklären, mit den vollständigen/konkreten Details und implementieren in jedem das dispose Muster zu klären. Nicht das Ende der Welt, aber ich möchte es nicht müssen.
Also verstehe ich richtig, dass "private ConcreteRepo _repository;" ist in der Klasse, die Sie refaktoriert haben? Sie möchten, dass die Klasse, die Sie schreiben, dieses Repository-Feld enthält * UND * ist der TEntity-Typ-Parameter des Repositorys? Genau das, was Sie refaktorisiert haben, ist mir nicht ganz klar. –