Ich versuche, Unity dazu zu bringen, die Erstellung meiner Objekte zu verwalten, und ich möchte einige Initialisierungsparameter haben, die erst zur Laufzeit bekannt sind:
Im Moment kann ich mir nur vorstellen, wie das geht, wenn ich eine Init-Methode auf der Schnittstelle habe.
interface IMyIntf {
void Initialize(string runTimeParam);
string RunTimeParam { get; }
}
Um es dann (in Unity) zu verwenden, würde ich Folgendes tun:
var IMyIntf = unityContainer.Resolve<IMyIntf>();
IMyIntf.Initialize("somevalue");
In diesem Szenario wird der runTimeParam
Parameter zur Laufzeit basierend auf Benutzereingaben bestimmt. Der triviale Fall hier gibt einfach den Wert von zurück, runTimeParam
aber in Wirklichkeit ist der Parameter so etwas wie Dateiname und die Initialisierungsmethode macht etwas mit der Datei.
Dies führt zu einer Reihe von Problemen, nämlich dass die Initialize
Methode auf der Schnittstelle verfügbar ist und mehrfach aufgerufen werden kann. Das Setzen eines Flags in der Implementierung und das Auslösen einer Ausnahme bei wiederholtem Aufruf von Initialize
scheint sehr umständlich.
An dem Punkt, an dem ich meine Schnittstelle auflöse, möchte ich nichts über die Implementierung von wissen IMyIntf
. Was ich jedoch möchte, ist das Wissen, dass diese Schnittstelle bestimmte einmalige Initialisierungsparameter benötigt. Gibt es eine Möglichkeit, die Schnittstelle mit diesen Informationen irgendwie zu kommentieren (Attribute?) Und diese beim Erstellen des Objekts an das Framework zu übergeben?
Bearbeiten: Beschrieb die Oberfläche etwas mehr.
runTimeParam
ist eine Abhängigkeit, die zur Laufzeit anhand einer Benutzereingabe ermittelt wird. Sollte die Alternative dazu darin bestehen, es in zwei Schnittstellen aufzuteilen - eine zur Initialisierung und eine zum Speichern von Werten?