2014-04-27 13 views
5

Gibt es eine einfache Möglichkeit, ein Feld/Eigenschaft des Typs T zu einem Lazy zu refaktorieren, und alle Verwendungszwecke dieses Felds zu ersetzen, stattdessen FieldName.Value zu verwenden?Resharper-Refactor-Feld vom Typ T nach Lazy

Ich habe einen Controller mit einer Reihe von Abhängigkeiten, die in privaten Backing-Feldern gespeichert sind, aber nur einige der Abhängigkeiten sind für jeden Funktionsaufruf erforderlich. Um den Bau dieses Controllers zu beschleunigen, möchte ich alle Abhängigkeiten Lazy machen, aber es ist nur eine irritierende Menge an Arbeit von Hand zu tun. Irgendein Rat?

+2

Ich denke, die einfachste ist, wenn es ein Feld ist, Umgestalten einer Eigenschaft. dann, in der Getter, ändern Sie die Unterstützung Feld zu einem 'Lazy ' und zurück gibt es 'Value' Eigenschaft in diesem Getter. d.h. es gibt kein spezifisches Refactoring dafür. –

Antwort

4
  1. Tools>Create GUID

  2. Resharper>Refactor>Rename

    Foo =>Foo_299E4ADB-5770-458C-B030-E40E19B0FFAF

  3. Edit>Find and Replace>Replace in Files

    _299E4ADB-5770-458C-B030-E40E19B0FFAF =>.Wert

2

wenn Sie zuvor hatten,

public class LazyClass 
{ 
// initialized in constructor etc. 
public MyType MyTypeProperty { get; set; } 
} 

dann können Sie es faul geladen machen, ohne dass die Anrufer zu beeinflussen, wie folgt:

public class LazyClass 
{ 
private Lazy<MyType> myType = new Lazy<MyType>(() => new MyType()); 

public MyType MyTypeProperty 
{ 
    get { return this.myType.Value; } 
} 
} 

ich zweifle, ob ReSharper dieses Refactoring eingebaut hat. Wie auch immer, Sie wollen nicht, dass alle Anrufer wissen, dass es Lazy ist und bezeichnen Sie es als LazyType.Value. Setzen Sie den Lazy-Typ nicht frei.

+0

Um zu klären, die Felder, die ich ändern würde, sind privat für die Klasse, so denke ich, es ist in Ordnung, sie rein Lazy's zu haben und nicht von einem Eigentum Accessor eingewickelt. Wenn ich externe Eigenschaften hätte, würde ich diese Methode unbedingt anwenden. – hermitt