扩展方法 - 更改命名空间

5
我正在使用一个第三方库,该库包含许多基于IQueryable的扩展方法。为了使用这些扩展方法,我不希望我的应用程序充斥着指向第三方命名空间的using语句。
这样做是为了尽可能轻松地在不久的将来切换库。然而,我不确定最佳的实现方式是什么。我曾考虑过的一个选择是在项目中创建自己的一组扩展方法(然后我可以控制名称空间)。但问题在于我无法知道如何保持现有扩展方法的名称。例如:
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);
        }
    }
}

你可能会发现问题就在这里。当我试图在我的扩展方法中调用第三方扩展方法时,它实际上会调用自身,从而创建一个无限循环。
感谢您的帮助。谢谢。
2个回答

4
你不一定要像使用扩展方法那样使用扩展方法,你可以像静态方法一样使用它们... 这样你就可以调用第三方Fetch方法:
ThirdPartyNamespace.Fetch(queryable, selector)

1

为了解决名称问题,您可以将扩展方法作为其实际静态方法轻松调用:

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

话虽如此,我不明白你的动机。为什么你不想使用第三方命名空间呢?对于需要这个扩展方法的文件,在开头使用指令有何问题?无论如何,您都将拥有众多 using 指令。如果出于某种原因这个列表对你来说太长了,那就简单地将其包装在一个区域中,并折叠该区域:

#region

using Namespace1;
using Namespace2;
using Namespace3;

#endregion

感谢您的回复。这样做的原因是扩展方法属于NHibernate,我希望将来能够迁移到Entity Framework。因此,我正在尽力减少对NHibernate的依赖。 - nfplee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接