Factory-Klasse für die Rücksendung eine generische Schnittstelle
Habe ich wenig Beton verwendet den folgenden Typ von Schnittstelle
interface IActivity<T>
{
bool Process(T inputInfo);
}
Konkreten Klassen sind wie folgt
class ReportActivityManager :IActivity<DataTable>
{
public bool Process(DataTable inputInfo)
{
//Some coding here
}
}
class AnalyzerActivityManager :IActivity<string[]>
{
public bool Process(string[] inputInfo)
{
//Some coding here
}
}
Nun, wie kann ich schreiben die factory-Klasse, die retuns eine generische Schnittstelle einige Sache wie die IActivity.
class Factory
{
public IActivity<T> Get(string module)
{
//... How can i code here
}
}
Dank
- Immer Fehler.. Fehler CS0050: Inkonsistente accessibility: return type
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie generische Methode, da sonst der compiler nicht weiß, Art der
T
im Rückgabewert. Wann haben Sie dasT
Sie werden in der Lage sein zu erstellen Aktivität basierend auf der Art derT
:Verwendung:
IActivity<T>
- Schnittstelle hatinternal
Sichtbarkeit. Sollten Sie öffentlich machen auch.Bind<IActivity<DataTable>>().To<ReportActivityManager>();
und dann abrufen Beispiel auf diese Weise:IActivity<DataTable> activity = kernel.Get<IActivity<DataTable>>();
Create
. Auf der anderen Seite service-locator nur sucht, wo service sitzt und gibt die Referenz zum service. I. e. wenn wir die singleton -, dann eine einzige Instanz des Dienstes in der Anwendung. Das ist, warum service locators in der Regel haben Methoden namensGet
stattCreate
, denn das wird unübersichtlichOft dies umgesetzt wird als in lazyberezovsky Antwort. In c++ könnte man mithilfe von template-Spezialisierung zu erhalten compiler-Fehler, wenn Sie versuchen, erstellen Sie eine Art Werk nicht behandeln.
Können Sie nicht tun, dass in C#, aber Sie können nahe kommen. Wenn der code Aussehen könnte, ein wenig überraschend, was wiederum ein problem sein könnte.
Die Nutzung würde dann
natürlich funktioniert dies nur, wenn Sie können übergeben Sie einen konkreten Typ. Wenn Sie brauchen, um pass-a-Typ-parameter werden die Dinge komplizierter.