我们都知道,在 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类,包括指定多个Startup类的方法及其效果,系统默认查找启动类的约定,以及如何通过环境变量选择不同的启动类。此外,还介绍了启动类命名和实现IStartup接口的要求。
706

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



