Gibt es einen Vorteil, Schnittstellen explizit in Bezug auf Dependency Injection zu implementieren?Abhängigkeitsinjektion und explizite Schnittstellenimplementierung
Soweit ich verstehe, kann Schnittstellen entweder explizit oder implizit implementiert werden:
interface IFoo
{
void Bar();
}
//implicit implementation
class Foo1 : IFoo
{
public void Bar(){}
}
//explicit implementation
class Foo2 : IFoo
{
void IFoo.Bar(){}
}
Nun ist die explizite Implementierung nur durch den Aufruf der Interface-Methode, während die implizite Umsetzung direkt aufgerufen werden kann auf ein aufgerufen werden kann Instanz der Klasse:
class Baz
{
void Ba()
{
Foo1 foo1 = new Foo1();
foo1.Bar();
Foo2 foo2 = new Foo2();
foo2.Bar(); //syntax error
IFoo foo2_explicit = new Foo2();
foo2_explicit.Bar();
}
}
So expliziten Schnittstellenimplementierungen unter Verwendung einer eine Methode für eine konkrete Klasse nicht zufällig nennen kann, aber man muss das Interface-Methode aufzurufen. Verhindert dies einen eng gekoppelten Code, wie es ein Zweck von DI ist, oder banne ich hier den falschen Baum? Immerhin kann man nicht aus Versehen einen Konstruktor oder eine Methode schreiben, die eine konkrete Klasse statt einer Schnittstelle injiziert wird:
class Baz
{
void Ba(Foo2 foo)
{
foo.Bar(); //syntax error
}
void Bb(IFoo foo)
{
foo.Bar();
}
}
Können Sie Ihren Code aktualisieren, um IFoo anstelle von Foo zu verwenden?Es ist verwirrend meiner Meinung nach ... –
Geschehen - sorry, in der Regel respektiere ich Code Konventionen ... – Thaoden