Wie könnte ich folgende Problematik umgehen?
-
Datenquelle:
//Schnittstelle für eine Datenquelle
interface IDataSource<TSource> { TSource GetCurrentDatabase(); void CreateNewDatabase(); TSource[] GetQuerySources(DateTime from, DateTime to); }
//Foo als Implementaion der Datenquelle class Foo : IDataSource<OleDbConnection> { }
Der datenquellen Manager gibt aktuelle Quelle zurück etc.:
class DataSourceManager { public DataSourceManager( IDataSource<TSource> source) { _source = source; } private IDataSource<TSource> _source; }
bei der instanierung der DateSourceManager wird folgender fehler angeigt
DataSourceManager xx = new DataSourceManager(new Foo());
Fehler 1 Die Typargumente der AccessEventLogging.DataSourceManager.DataSourceManager(AccessEventLogging.IDataSource<TSource>)-Methode können nicht per Rückschluss aus der Syntax abgeleitet werden. Geben Sie die Typargumente explizit an. C:\Documents and Settings\Operator\My Documents\Visual Studio 2008\Projects\3D_Projecte\FormatTEst\AccessEventLogging\Program.cs 96 27 AccessEventLogging
Wie mach ich das besser, bzw. wie bekomm ich den fehler weg... was meine Intension der Konstruktion ist , ist glaub ich erkennbar
-
Das Problem wird folgendes sein:
class DataSourceManager { public DataSourceManager( IDataSource<TSource> source) //<---TSource { _source = source; } private IDataSource<TSource> _source; }
Der Ctor ist einfach nicht eindeutig, du musst ihm da schon eine eindeutige IDataSource übergeben.
-
Willst du ein generisches Interface in einer Liste benutzen, musst du das Interface splitten in ein Generisches und ein Nicht-Generisches Interface.
Also wird aus:interface IDataSource<TSource> { TSource GetCurrentDatabase(); void CreateNewDatabase(); TSource[] GetQuerySources(DateTime from, DateTime to); }
das hier
interface IDataSource { void CreateNewDatabase(); } interface IDataSource<TSource> : IDataSource { TSource GetCurrentDatabase(); TSource[] GetQuerySources(DateTime from, DateTime to); }
in deinem Fall sollte es aber reichen wenn du den DataSourceManager Generisch machst. Vielleicht wär hier sogar ein Singleton angebracht, weiss aber gerade nicht in wie fern die Instanz benutzt wird.