C# 避免更多命名空间的命名空间技巧
我正在ASP.NET核心MVC应用程序中编写一些测试代码。在默认的C# 避免更多命名空间的命名空间技巧,c#,.net,asp.net-core,swagger,C#,.net,Asp.net Core,Swagger,我正在ASP.NET核心MVC应用程序中编写一些测试代码。在默认的Startup.cs中,它使用MVC,如下所示: public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { app.UseMvc(routes => { /* ... */ }); } 查看我们可以看到的。UseMvc是iaapplicationbuilder的一种扩
Startup.cs
中,它使用MVC,如下所示:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc(routes => { /* ... */ });
}
查看我们可以看到的。UseMvc
是iaapplicationbuilder
的一种扩展方法
现在我想为这个项目添加支持。现在有一个,我添加了参考,现在我可以使用:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc(routes => { /* ... */ });
app.UseSwagger(...);
}
但是等等!在使用之前,我没有使用语句添加任何。使用swagger
!然后我发现了一件棘手的事情:在引用的swagger库中,他们有一个名为Microsoft.AspNetCore.Builder
的名称空间,它是iaapplicationbuilder
所属的(在另一个库中),所以这个名称空间在Startup.cs
中绝对“使用”
我承认这是一种聪明的方法,用户不会浪费时间寻找扩展方法的名称空间(即使现在VS2015可以检测扩展方法的名称空间,但可以想象其他IDE,例如VS代码)。但是在CompanyA.ProjectA.XXX.dll
中添加一个完全不相关的名称空间CompanyB.ProjectB.XXX
会有风险吗?投票结果接近,但没有解释原因的评论?真的吗?@GoodNightNerdPride,我想可能主要是基于观点。为什么会有问题呢?如果你为一个特定的名称空间构建了一个全局扩展,那么把它放在同一个名称空间中,你就可以看到更多关于潜在扩展的信息conflicts@SirRufo-直到两个独立的项目给它们的扩展方法起了相同的名字,而这一切都会分崩离析,迫使这些项目的消费者(如果两者都使用)必须使用别名并停止使用扩展方法。