2011-08-18 4 views
5

IQueryable 위에 여러 확장 메서드가 포함 된 타사 라이브러리를 사용하고 있습니다. 이러한 확장 메서드를 사용하려면 확장 메서드가있는 타사 네임 스페이스에 문을 사용하여 응용 프로그램을 산재하게하고 싶지 않습니다.확장 메서드 - 네임 스페이스 변경

이렇게하면 가까운 곳의 언젠가는 라이브러리에서 전환 할 수 있습니다 미래를 가능한 한 쉽게 그러나 나는 이것을하는 가장 좋은 방법이 무엇인지 모르겠다. 내가 고려한 한 가지 옵션은 프로젝트 내에서 확장 메서드의 자체 집합을 만드는 것이 었습니다. 그런 다음 네임 스페이스를 제어 할 수 있습니다. 이 문제는 내가 기존 확장 메서드의 이름을 어떻게 유지할 수 있는지 알 수 없다. 예 :

namespace MyProject.Extensions { 
    public static class IQueryableExtension { 
     public static IQueryable<T> Fetch<T, K>(this IQueryable<T> queryable, Expression<Func<T, K>> selector) { 
      return queryable.Fetch(selector); 
     } 
    } 
} 

여기에서 문제가 발생할 수 있습니다. 광산에서 제 3 자 확장 메서드를 호출하려고 할 때 실제로 무한 루프를 만드는 자체를 호출합니다.

도움을 주시면 감사하겠습니다. 감사합니다

답변

4

당신은 당신이 제 3 자에게 전화 할 수 있도록 가져 오기 ... 정적 방법과 같은 방법을 사용할 수 있습니다, 확장 방법으로 확장 방법을 사용할 필요가 없습니다 :

ThirdPartyNamespace.Fetch(queryable, selector) 
+0

안녕하십니까. – nfplee

1

가 함께 문제를 해결하기 위해 이름, 당신은 쉽게 정말 정적 방법으로 확장 메소드를 호출 할 수 있습니다 :

return Third.Party.Namespace.Fetch(queryable, selector); 

가 나는 당신의 의욕을 이해하지 못하는, 그런 말로 미루어 보아. 제 3 자 네임 스페이스를 사용하고 싶지 않은 이유는 무엇입니까? 이 확장 메서드가 필요한 파일의 시작 부분에 지시문을 사용하면 어떤 문제가 있습니까? 당신은 어쨌든 수많은 지시자를 사용하게 될 것입니다. 어떤 이유로 든이 목록이 너무 길면 단순히 해당 지역을 감싸서 해당 지역을 접습니다.

#region 

using Namespace1; 
using Namespace2; 
using Namespace3; 

#endregion 
+0

안녕하십니까. 안녕하세요. 이 작업을 수행하는 이유는 확장 메서드가 NHibernate와 별개이므로 향후 언젠가 Entity Framework로 마이그레이션하려고합니다. 따라서 나는 NHibernate에 대한 많은 의존성을 제거하려고 노력 중이다. – nfplee

관련 문제