Obwohl dies eine allgemeine Frage ist, ist sie auch spezifisch für ein Problem, auf das ich momentan stoße. Ich habe derzeit eine in meiner Lösung angegebene Schnittstelle namens
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
Diese Schnittstelle wird oft im gesamten Programm verwendet und daher habe ich einfachen Zugriff auf die Objekte, die ich benötige. Auf einer relativ niedrigen Ebene eines Teils meines Programms benötige ich jedoch Zugriff auf eine andere Klasse, die IAreaContext verwendet und einige Operationen außerhalb dieser Klasse ausführt . Deshalb habe ich eine andere Factory-Oberfläche erstellt, die folgende Bezeichnung hat:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
Ich habe eine Klasse, die den IContextProvider implementiert und mit NinJect injiziert wird. Das Problem, das ich habe, ist, dass der Bereich, in dem ich diesen IEventContextFactory verwenden muss, nur Zugriff auf den IContextProvider hat und selbst eine andere Klasse verwendet, die diese neue Schnittstelle benötigt. Ich möchte diese Implementierung von IEventContextFactory nicht auf der niedrigen Ebene instanziieren müssen und möchte lieber durchgehend mit der IEventContextFactory- Schnittstelle arbeiten. Ich möchte jedoch auch keinen weiteren Parameter über die Konstruktoren einfügen müssen, nur um ihn an die Klasse weiterzuleiten, die ihn benötigt, d. H
// example of problem
public class MyClass
{
public MyClass(IContextProvider context, IEventContextFactory event)
{
_context = context;
_event = event;
}
public void DoSomething()
{
// the only place _event is used in the class is to pass it through
var myClass = new MyChildClass(_event);
myClass.PerformCalculation();
}
}
Meine Hauptfrage ist also, ob dies akzeptabel ist oder ob es überhaupt üblich ist, so etwas zu tun (Interface erweitere ein anderes Interface):
public interface IContextProvider : IEventContextFactory
oder sollte ich bessere Alternativen in Betracht ziehen, um das zu erreichen, was ich brauche? Wenn ich nicht genügend Informationen zur Verfügung gestellt habe, um Vorschläge zu machen, lass es mich wissen und ich kann mehr liefern.