我不理解构造函数之后的代码。
var host = new WebHostBuilder()
.UseKestrel()
.UseConfiguration(config)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
这 https://www.hanselman.com/blog/PublishingAnASPNETCoreWebsiteToACheapLinuxVMHost.aspx
答案 0 :(得分:5)
它只是方法链接,并且在流畅的设计模式中很常见(如LINQ等)。
例如:
public class TestClass
{
public TestClass DoSomething()
{
return this;
}
}
通过上述内容,您可以这样做:
var test = new TestClass().DoSomething();
在您的示例中,它专门用于配置准备使用的Web主机。在这种情况下:
var host = new WebHostBuilder()
.UseKestrel() // Use Kestrel web server
.UseConfiguration(config) // Use the IConfiguration specified in config
.UseContentRoot(Directory.GetCurrentDirectory()) // Set the content directory
.UseStartup<Startup>() // Set the startup class
.Build(); // Build and instantiate an IWebHost based on the above configuration
答案 1 :(得分:5)
如果你有一个班级
public class C
{
public C MethodA()
{
//TODO: do something useful here.
return this;
}
public C MethodB()
{
//TODO: do something useful here.
return this;
}
public C MethodC()
{
//TODO: do something useful here.
return this;
}
}
其中方法返回对象本身的实例,您可以像这样调用这些方法:
var c = new C();
c.MethodA();
c.MethodB();
c.MethodC();
或
var c = new C();
c.MethodA().MethodB().MethodC();
甚至
var c = new C().MethodA().MethodB().MethodC();
这些调用也可能返回另一个可能是另一种类型的对象。在这种情况下,语句var result = new T().A().B().C();
等同于:
var temp1 = new T();
var temp2 = temp1.A();
var temp3 = temp2.B();
var result = temp3.C();
方法也可以是扩展方法。
答案 2 :(得分:4)
这些是[{1}}界面的[扩展]方法。
它被设计为用作流畅的API,这意味着对方法的每次调用都会返回[推测]实现IWebHostBuilder
接口的同一对象的实例,因此您可以在其中保持调用方法链
IWebHostBuilder
所以最后,host变量是调用[推测]同一个对象的几个操作的结果,最终调用一个最终方法var host = new WebHostBuilder() //This call would return IWebHostBuilder
.UseKestrel() //This call would return IWebHostBuilder
.UseConfiguration(config) //This call would return IWebHostBuilder
.UseContentRoot(Directory.GetCurrentDirectory()) //This call would return IWebHostBuilder
.UseStartup<Startup>() //This call would return IWebHostBuilder
.Build(); //This call would return IWebHost
,返回一个{{1}类型的对象}}
这在功能上等同于:
Build
我说&#34;大概&#34;因为这一切都取决于内部实施。
答案 3 :(得分:2)
我不理解构造函数之后的代码。
我认为你对此感到困惑只是因为它在构造函数上完成了。您的代码等同于:
var builder = new WebHostBuilder();
var host = builder.UseKestrel()
.UseConfiguration(config)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
因此,在这些方法调用中没有特殊的魔法,它恰好在WebHostBuilder()
返回的对象上被调用。