Nun, ich weiß nicht, ob "starke Benennung" der richtige Ausdruck ist, aber was ich tun möchte, ist wie folgt.
Zur Zeit verwende ich ConstructorArgument wie z. das:
%Vor%Wenn ich jetzt den Parameter "name" umbenenne (z. B. mit ReSharper), wird das ConstructorArgument nicht aktualisiert, und ich erhalte einen Laufzeitfehler beim Erstellen des Ninja. Um das zu beheben, muss ich manuell alle Orte finden, an denen ich diesen Parameter durch ein ConstructorArgument angegeben habe, und sie aktualisieren. Nicht gut, und ich bin irgendwann zum Scheitern verurteilt, obwohl ich eine gute Testabdeckung habe. Umbenennen sollte eine billige Operation sein.
Gibt es irgendeine Möglichkeit, dass ich stattdessen einen Verweis auf den Parameter machen kann - so dass er aktualisiert wird, wenn ich den Parameter umbenenne?
Wenn Sie mehr von dem teilen können, was Sie wirklich erreichen wollen, erhalten Sie eine bessere Antwort. Im Allgemeinen möchten Sie sich nicht darauf verlassen, ein ConstructorArgument überhaupt zu übergeben, wenn Ihnen geholfen werden kann - es sollte ein letzter Ausweg sein, um einen Parameterwert in die Erstellung einer Komponente einzupassen, die Sie nicht besitzen und auf die Sie sich daher nicht verlassen können während der Refactoring-Aktivitäten [wie] willy nilly umbenannt werden. Also für normalen Code, wenn Sie versuchen können, es an Schnittstellen zu halten, um Dinge eindeutig zu machen und sich nicht auf die Namen zu verlassen, die besser sind.
Ich kann jetzt kein Beispiel ausgraben, aber es gibt ein ziemlich allgemeines Idiom namens statische Reflexion . Ein mitgeliefertes KonstruktorArgument kann mit jedem Parameter dieses Namens über alle Konstruktoren übereinstimmen, so dass die statische Reflexion in dieser Instanz nicht am besten geeignet ist.
Daher ist das Beste, was Sie mit der statischen Reflexion wahrscheinlich erreichen können, etwas wie:
%Vor%Das typische Beispiel, das Sie sehen, ist, wo Sie den Namen einer Eigenschaft extrahieren möchten, auf die in einer Instanz zugegriffen wird. Dies ist ein wenig anders, da es an einem Konstruktoraufruf-Ausdruck arbeiten muss.
Um eine passende Lib zu finden, die bereits genau das hat, trainieren Sie für den Sucher: D (Aber ich würde vorschlagen, einen besseren Weg zu finden, was Sie tun möchten, das ConstructorArgument
sowieso nicht diesem Ansatz vorzieht .)
Tags und Links .net refactoring ninject naming constructorargument