.NET - 如何正确构造 NuGet 包以便用户只需使用 'Package.Parse()'
.NET - How to properly structure a NuGet package so that users simply use 'Package.Parse()'
我第一次做一个包,一直在我的项目中使用,预期用途是MyPackage.Parse()
,但目前必须用作MyPackage.MyPackage.Parse()
.
该包分为两个项目,MyPackage
和 MyPackage.Tests
。 MyPackage有一个class文件又叫了,MyPackage,看起来像
namespace MyPackage
{
public static class MyPackage
{
public static PackageModel Parse(string text)
{
}
}
}
我猜我遇到了问题,因为 Parse 在静态 MyPackage class 中,它在 MyPackage 命名空间中。
该用户还可以访问我并不真正感兴趣的其他文件夹和文件,例如 MyPackage.Constants
、MyPackage.Services
.
那么我该如何创建一个 NuGet 包,最终结果是他们只能使用 MyPackage.Parse()
?
命名空间不是强制性的,因此您可以将 class 放在隐式全局命名空间中。然后,客户不需要使用命名空间来限定您的 class。
但是,请不要那样做。目前,您的客户只需在其文件顶部添加一个简单的 using MyPackage;
即可实现您的预期。这是很好的做法。
名称空间的存在是为了避免名称冲突,当您不使用它们时,您就有名称冲突的风险。更糟糕的是,您的客户还面临名称冲突的风险。如果他们使用的另一个包有一个名为 MyPackage
的 class,他们将很难再使用你的 class,只能通过丑陋的语法结构。因此,约定是 use 命名空间,即使这意味着您的客户必须添加 using 语句。
我第一次做一个包,一直在我的项目中使用,预期用途是MyPackage.Parse()
,但目前必须用作MyPackage.MyPackage.Parse()
.
该包分为两个项目,MyPackage
和 MyPackage.Tests
。 MyPackage有一个class文件又叫了,MyPackage,看起来像
namespace MyPackage
{
public static class MyPackage
{
public static PackageModel Parse(string text)
{
}
}
}
我猜我遇到了问题,因为 Parse 在静态 MyPackage class 中,它在 MyPackage 命名空间中。
该用户还可以访问我并不真正感兴趣的其他文件夹和文件,例如 MyPackage.Constants
、MyPackage.Services
.
那么我该如何创建一个 NuGet 包,最终结果是他们只能使用 MyPackage.Parse()
?
命名空间不是强制性的,因此您可以将 class 放在隐式全局命名空间中。然后,客户不需要使用命名空间来限定您的 class。
但是,请不要那样做。目前,您的客户只需在其文件顶部添加一个简单的 using MyPackage;
即可实现您的预期。这是很好的做法。
名称空间的存在是为了避免名称冲突,当您不使用它们时,您就有名称冲突的风险。更糟糕的是,您的客户还面临名称冲突的风险。如果他们使用的另一个包有一个名为 MyPackage
的 class,他们将很难再使用你的 class,只能通过丑陋的语法结构。因此,约定是 use 命名空间,即使这意味着您的客户必须添加 using 语句。