2013-10-02 4 views
6

Stellen Sie sich vor, Sie haben einige Methoden, auf die Sie von Ihrer gesamten Anwendung aus zugreifen müssen. Eine statische Klasse ist dafür ideal.Verwenden Sie statische Klasse von Schnittstelle?

Aber vielleicht in Zukunft werde ich eine zweite Implementierung der statischen Methoden in einer anderen statischen Klasse hinzufügen.

public static class MyStaticClass2 
{ 
    public static void MyMethod() 
    { 
     // Do Something here... 
    } 
} 

Gibt es eine Möglichkeit statische Klasse in meinem anderen Code verwendet zu ändern, ohne die Anrufe von MyStaticClass.MeMethod(); zu MyStaticClass2.MyMethod(); ändern?

dachte ich über eine Schnittstelle, aber ich habe keine Ahnung, wie dies zu implementieren ... Wenn ich rede, es ist verrückt sagen, und ich werde einfach die Anrufe ändern: D

+0

Nein, auf statischer Ebene gibt es keine Schnittstellen. Sie können den Körper von 'MyStaticClass.MeMethod' auskommentieren und Anrufe an' MyStaticClass2' weiterleiten, wenn Sie es eilig haben;) – BartoszKP

+0

Sie können MyMethod() in eine andere statische Klasse einfügen, so dass Sie von beiden darauf zugreifen können Ihrer aktuellen statischen Klassen. – frenchie

Antwort

11

Sie wollen eine factory pattern

so Ihre Fabrik ist

public static MyStaticClassFactory 
{ 
    public static IMyNonStaticClassBase GetNonStaticClass() 
    { 
     return new MyNonStaticClass1();  
    } 

} 

Instanz

public class MyNonStaticClass1 : IMyNonStaticClassBase 
{ 
    // 
} 

Inte rface

public interface IMyNonStaticClassBase 
{ 
    void MyMethod(); 
} 
+0

Sie können auch einen DI-Container verwenden (abhängig von der Komplexität Ihrer Anwendung). –

+0

Ich weiß nicht viel über DI, aber ich denke, das wäre zu komplex für mich: D –

1

Wir verwenden (Windsor Castle) https://www.nuget.org/packages/Castle.Windsor als Fabrik Container.

Es ist das gleiche Prinzip.

Sie können viele Implementierungen für jede einzelne Schnittstelle haben, aber nur eine ist jemals mit der Schnittstelle in der Factory zur Laufzeit verbunden.

Alles, was Sie tun müssen, ist, die Implementierungsklasse bei Bedarf auf der Factory-Ebene zu tauschen.

Dies ist ein wirklich nützliches Werkzeug, wenn Sie Ihren Code optimieren möchten, dh eine Implementierungsklasse, da Sie die Sicherheit haben, dass Sie, wenn Sie Fehler in Ihrer neuen Implementierungsklasse finden, die Implementierung einfach austauschen können das Vorhandene.

Verwandte Themen