2014-04-27 1 views
5

Type T의 필드/속성을 Lazy로 리팩터링하고 FieldName.Value를 사용하기 위해 해당 필드의 모든 사용을 바꿀 수있는 쉬운 방법이 있습니까?Resharper Refactor 유형의 T에서 지연 형으로

개인 백업 필드에 저장된 종속성이있는 컨트롤러가 있지만 특정 함수 호출에는 종속성 중 일부만 필요합니다. 이 컨트롤러의 구성 속도를 높이기 위해 모든 의존성을 지연 시키려하지만 손으로하는 일만해도 짜증나게합니다. 어떤 충고?

+2

나는 필드, 리팩토링은 속성의 경우 가장 쉬운라고 생각합니다. getter에서 backing 필드를'Lazy '으로 바꾸고 그 getter에'Value' 속성을 반환하십시오. 즉 이에 대한 특정 리팩토링이 없습니다. –

답변

4
  1. Tools>Create GUID

  2. Resharper>Refactor>Rename

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

  3. Edit>Find and Replace>Replace in Files

    _299E4ADB-5770-458C-B030-E40E19B0FFAF =>.Value는

2

이전에 당신이 한 경우,

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

는 다음과 같이 발신자에 영향을주지 않고, 그것은 게으른로드 할 수 있습니다 :

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

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

내가 ReSharper에서가 내장이 다시 인수 분해가 있는지 의심한다. 어쨌든, 모든 호출자가 게으름을 알리고 이것을 LazyType.Value이라고 지칭하지 마십시오. Lazy 유형을 노출시키지 마십시오.

+0

명확히하기 위해, 내가 바꿀 필드는 클래스에 비공개이므로, 순수한 게으름을 가지며 속성 접근자가 래핑하지 않는 것이 좋습니다. 외부 속성이 있어야한다면이 방법을 절대 사용합니다. – hermitt