2011-08-18 45 views
5

Tôi đang sử dụng thư viện của bên thứ ba chứa một loạt các phương pháp tiện ích mở rộng trên đầu trang của IQueryable. Để sử dụng các phương thức mở rộng này, tôi không muốn ứng dụng của mình được rải rác bằng cách sử dụng câu lệnh cho không gian tên của bên thứ ba mà phương thức mở rộng nằm trong đó.Phương thức mở rộng - Thay đổi không gian tên

Điều này là để tôi có thể chuyển nó ra thư viện tương lai dễ dàng nhất có thể. Tuy nhiên tôi không chắc chắn cách tốt nhất để làm điều này là gì. Một tùy chọn mà tôi đã suy nghĩ là tạo ra một tập các phương thức mở rộng của riêng tôi trong dự án (sau đó tôi có thể kiểm soát không gian tên). Vấn đề với điều này là tôi không thể thấy làm thế nào tôi có thể duy trì tên của phương pháp mở rộng hiện có. Ví dụ:

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); 
     } 
    } 
} 

Bạn có thể thấy sự cố ở đây. Nơi tôi đang cố gắng gọi phương thức mở rộng của bên thứ ba bên trong tôi, nó thực sự gọi chính nó là tạo ra một vòng lặp vô hạn.

Tôi đánh giá cao sự trợ giúp. Cảm ơn

Trả lời

4

Bạn không cần phải sử dụng phương pháp khuyến nông như các phương pháp mở rộng, bạn có thể sử dụng chúng như phương pháp tĩnh ... vì vậy bạn có thể gọi các bên thứ 3 Fetch phương pháp:

ThirdPartyNamespace.Fetch(queryable, selector) 
+0

Xin cảm ơn câu trả lời của bạn. – nfplee

1

Để giải quyết vấn đề với tên, bạn có thể dễ dàng gọi phương thức mở rộng là phương pháp tĩnh thực sự là:

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

Có nói rằng, tôi không hiểu động lực của bạn. Tại sao bạn không chỉ muốn sử dụng không gian tên của bên thứ ba? Vấn đề của bạn khi sử dụng chỉ thị ở đầu tệp cần phương pháp mở rộng này là gì? Bạn sẽ có rất nhiều bằng cách sử dụng chỉ thị anyway. Nếu danh sách này quá dài đối với bạn vì một lý do nào đó, chỉ cần quấn nó vào một vùng và thu gọn khu vực đó:

#region 

using Namespace1; 
using Namespace2; 
using Namespace3; 

#endregion 
+0

Xin cảm ơn sự trả lời của bạn. Lý do để làm điều này là các phương pháp mở rộng là ngoài NHibernate và tôi muốn di chuyển đến Entity Framework đôi khi trong tương lai. Vì vậy, tôi đang cố gắng để loại bỏ càng nhiều phụ thuộc vào NHibernate như tôi có thể. – nfplee

Các vấn đề liên quan