2011-08-18 136 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); 
     } 
    } 
} 

您可能会在这里看到问题。我在哪里试图调用我的第三方扩展方法,它实际上调用自己创建一个无限循环。

我会很感激的帮助。由于

回答

4

您不必使用扩展方法作为扩展方法,你可以使用它们像静态方法...所以你可以调用第三方获取方法:

ThirdPartyNamespace.Fetch(queryable, selector) 
+0

嗨感谢你的答案。 – nfplee

1

为了解决这个问题名字,你可以很容易地调用扩展方法的静态方法真的是:

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

话虽如此,我不明白你的动机。你为什么不想使用第三方命名空间?在需要此扩展方法的文件开始处使用指令时,您遇到什么问题?反正你会有很多使用指令。如果该列表是你太久出于某种原因,只需将它放在一个区域和折叠该地区:

#region 

using Namespace1; 
using Namespace2; 
using Namespace3; 

#endregion 
+0

嗨,感谢您的回复。这样做的原因是,扩展方法是NHibernate的一部分,我希望将来有时会迁移到实体框架。因此,我试图删除尽可能多的依赖NHibernate,因为我可以。 – nfplee