如何在c#中调用特定的命名空间函数
本文关键字:命名空间 函数 调用 | 更新日期: 2023-09-27 18:02:07
目前,我有两个来自同一库的函数,在我的情况下都可以调用。如何指定函数的特定名称空间,以便调用它?
调用在以下方法或属性之间是不明确的:IWebHostBuilder,字符串)和"Microsoft.AspNetCore.Hosting.HostingAbstractionsWebHostBuilderExtensions.UseContentRoot (Microsoft.AspNetCore.Hosting。IWebHostBuilder, string)'
这是错误(读起来有点乱),但这就是问题所在。
代码如下:
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Builder;
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory()) //The Problem!!
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
您正在使用流畅的符号(连续调用方法链接在一起),并且在此过程中依赖于静态扩展方法,所有这些都是很好的风格。不确定如何保持这种漂亮的风格,但如果将其分开,可以通过名称空间定位所需的方法调用。
var intermediateResult = new WebHostBuilder()
.UseKestrel();
现在选择您想要的方法(我的示例使用第一个名称空间中的方法,但这是您的选择)。
Microsoft.AspNetCore.Hosting.WebHostBuilderExtensions.UseContentRoot(intermediateResult, Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
很丑,但是应该可以编译,并且可以运行。
注意。您将注意到,我用两个参数调用了方法UseContentRoot()
!这只是在明确下面发生了什么。
UseContentRoot(String currentDir)
实际上写成了类似于UseContentRoot(this IWebHostBuilder builder, String currentDir)
的东西,这意味着UseContentRoot
是为类(接口)IWebHostBuilder
编写的扩展方法。
特殊的this
关键字用法现在允许方法被调用(和链接在你的情况下),好像该方法是IWebHostBuilder的成员,所以如果你有一个IWebHostBuilder builder
,你可以做builder.UseContentRoot(currentDir)
。所以初始参数"移动"到圆点的左边,看起来这个扩展方法在IWebHostBuilder
上被声明为一个带一个参数的方法。
但是把它当作属于IWebHostBuilder
的方法来调用只是为了方便。您仍然可以按照最初编写的方式调用该方法,并使用其声明的两个参数:UseContentRoot(IWebHostBuilder builder, String currentDir)
,这就是它的实际声明方式。