我正在使用第三方库,其中包含一堆基于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);
}
}
}
您可能会在此处看到问题。我试图在我的内部调用第三方扩展方法,它实际上称自己创建一个无限循环。
我很感激帮助。感谢
答案 0 :(得分:4)
您不必使用扩展方法作为扩展方法,您可以像静态方法一样使用它们......所以您可以调用第三方Fetch方法:
ThirdPartyNamespace.Fetch(queryable, selector)
答案 1 :(得分:1)
要解决名称问题,您可以轻松地将扩展方法作为静态方法调用:
return Third.Party.Namespace.Fetch(queryable, selector);
话虽如此,我不明白你的动机。你为什么不只想使用第三方命名空间?在需要此扩展方法的文件开头使用指令有什么问题?无论如何,你将有许多使用指令。如果由于某种原因此列表太长,只需将其包装在一个区域中并折叠该区域:
#region
using Namespace1;
using Namespace2;
using Namespace3;
#endregion