Hallo,
ich hab folgende Frage ich habe eine Singleton Klasse
z.b
public sealed class DatabaseService
{
public delegate void DatabaseErrorDelegate(DBErrorType type,string message);
public event DatabaseErrorDelegate OnDatabaseError;
private static DatabaseService instance = new DatabaseService();
public static DatabaseService Instance {
get {
return instance;
}
}
private DatabaseService()
{
}
Nun möchte ich ein Inteface dafür definiere. ´Bei Normalen Klassen wäre wäre das kein Problem nur bei Singleton hab ich irgendwie ein Brett vorm Kopf
Das Interface darf die Singleton klasse nicht kennen.
Also hab ich mir folgendes überlegt.
IDatabaseService
{
static IDatabaseService Instance();
void Funkrion1();
}
Problem ist nun das das Inteface erst instanziert werden muss 😦 oder gibts da ein anderen kniff. Irgendwie klappt das nicht..
Hrm, schreib ein Interface IDatabaseService und schreibe dort alle relevanten Methoden Properties usw. rein. Deine Singletonklasse hat ja logischerweise einen private Konstruktor und ist Sealed usw. Daher spricht ein Property oder Member an für die Instanz.
private static DatabaseService instance;
public static IDatabaseService Instance
{
get
{
if(instance == null)
instance = new DatabaseService();
return instance;
}
}
// Constructor
private DatabaseService() { }
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
Vielen dank es funktzt!!
public sealed class DatabaseService :IDatabaseService
{
public delegate void DatabaseErrorDelegate(DBErrorType type,string message);
public event DatabaseErrorDelegate OnDatabaseError;
private static IDatabaseService instance;
public static IDatabaseService Instance {
get {
if (instance == null)
{
instance = new DatabaseService();
}
return instance;
}
}
private DatabaseService()
{
}
habs jetzt so abgeändert
leider meckert er das er im Interface nichts statisches definieren kann mhh..
leider meckert er das er im Interface nichts statisches definieren kann mhh..
Das kannst du doch nicht machen 😉 static abstract?
Wieso statisch 🤔
Brauchst doch nichts statisch definieren, ich glaube eher du brauchst ne ordentliche portion Kaffee und Sonne 😉
Du rufst doch wie folgt auf:
DatabaseService.Instance und bekommst nun die "public member / public methods oder public proeprties" von DatabaseService die von IDatabaseService angeboten werdne zurück.
Du brauchst da keine einzige zusätzliche statische Methode - den sonst ist's keine Singleton mehr.
Hier mal ein beispiel, hab's allerdings so runtergetippselt:
public delegate void ErrorDelegate(string message);
public interface IDatabaseService
{
string WieGehtDasABC { get; set; }
event ErrorDelegate ErrorEvent;
}
public sealed class DatabaseService : IDatabaseService
{
public event ErrorDelegate ErrorEvent;
private static IDatabaseService instance;
public static IDatabaseService Instance
{
get
{
if (instance == null)
instance = new DatabaseService();
return instance;
}
}
private string m_sNonsens = "ABC";
public string WieGehtDasABC
{
get { return this.m_sNonsens; }
set
{
if(value != "ABC")
if(this.ErrorEvent != null)
this.ErrorEvent(string.Format("Da will mir jemand weismachen ABC wäre {0}", value));
else
this.m_sNonsens = value;
}
}
}
public class MyClass
{
private MyClass()
{
DatabaseService.Instance.ErrorEvent += new ErrorDelegate(OnError);
DatabaseService.Instance.WieGehtDasABC = "ÄhmKeineAhnung?";
}
private void OnError(string error)
{
Console.WriteLine(error);
}
}
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(