.NET - 如何正确构造 NuGet 包以便用户只需使用 'Package.Parse()'

.NET - How to properly structure a NuGet package so that users simply use 'Package.Parse()'

我第一次做一个包,一直在我的项目中使用,预期用途是MyPackage.Parse(),但目前必须用作MyPackage.MyPackage.Parse().

该包分为两个项目,MyPackageMyPackage.Tests。 MyPackage有一个class文件又叫了,MyPackage,看起来像

namespace MyPackage
{
    public static class MyPackage
    {
        public static PackageModel Parse(string text)
        {
           
        }
    }
}

我猜我遇到了问题,因为 Parse 在静态 MyPackage class 中,它在 MyPackage 命名空间中。

该用户还可以访问我并不真正感兴趣的其他文件夹和文件,例如 MyPackage.ConstantsMyPackage.Services.

那么我该如何创建一个 NuGet 包,最终结果是他们只能使用 MyPackage.Parse()

命名空间不是强制性的,因此您可以将 class 放在隐式全局命名空间中。然后,客户不需要使用命名空间来限定您的 class。

但是,请不要那样做。目前,您的客户只需在其文件顶部添加一个简单的 using MyPackage; 即可实现您的预​​期。这是很好的做法。

名称空间的存在是为了避免名称冲突,当您不使用它们时,您就有名称冲突的风险。更糟糕的是,您的客户还面临名称冲突的风险。如果他们使用的另一个包有一个名为 MyPackage 的 class,他们将很难再使用你的 class,只能通过丑陋的语法结构。因此,约定是 use 命名空间,即使这意味着您的客户必须添加 using 语句。