我们都知道,在 Main 函数中必须要指定一个 Startup 启动类,但下面的内容鲜为人知。
可以指定多个 Startup
static void Main(string[] args)
{
WebHost.CreateDefaultBuilder(args)
.UseStartup<Starup1>()
.UseStartup<Startup2>()
.UseStartup<Startup3>()
//...
}
但结论却是,只有最后一个 Startup 启动类有效。我也是醉了。
如果我们不想指定一个启动类,系统默认会提供使用程序集查找,那查找的约定是怎样的呢?
WebHost.CreateDefaultBuilder(args)
.UseStartup("程序集1;程序集2;...")
Startup 启动类的环境变量约定
环境变量内置分为三种:Development、Staging 和 Production,当然你也可以用你自己的。 Core 的内部机制可以会结合你的 环境变量名 + Startup 来帮你找寻相应的启动类
static void Main(string[] args)
{
WebHost.CreateDefaultBuilder(args)
.UseStartup("MyApp")
//...
}
public class DevelopmentStartup
{
//...
}
public class ProductionStartup
{
//...
}
当你在开发的时候会使用 DevelopmentStartup 启动类,当你在生产环境的时候就会切换到 ProductionStartup 启动类了。
类名后缀为 Startup 的约定
只要你的启动类的名称结尾是用 Startup 来命名的,都会视为启动类。
public class MyClassStartup {}
实现了 IStartup 接口的类
你的类如果实现了 IStartup 接口,同样也可以被系统找到。
public class MyClass : IStartup { }
如果以上条件不具备,就会抛出异常了。

本文探讨了ASP.NET Core中Startup类的多种指定方式及其有效性,并介绍了如何通过程序集查找及环境变量来自动选择不同的启动配置。
941

被折叠的 条评论
为什么被折叠?



