在ASP.NET 5和MVC 6中从Web项目中分离启动配置的最佳方法

使用MVC5,创建一个引用所有层的引导程序项目非常容易,从而将UI层与对基础架构逻辑的引用分离开来。 该项目将包含启动配置逻辑,例如设置IoC容器。

这样做的方法是定义一个启动类:

public class Startup { public static void Start() { // startup configuration (IoC etc) goes here } } 

然后在AssemblyInfo.cs添加一行:

 [assembly: PreApplicationStartMethod(typeof(Startup), "Start")] 

不幸的是,这种方法不再适用于asp.net 5.我简要介绍了文档,但我发现的只是框架在Web项目中查找名为Startup的类。

我还看了一下Microsoft.AspNet.Hosting 源代码 ,它似乎负责查找Startup类。 我可以看到对配置类的一些引用,因此有可能通过使用某种配置设置来加载程序集,但我无法确认或确定哪个设置。

此外,如果这是真的,当在Startup类中加载文件本身时,如何使用config.json文件确定Startup类? 是否有不同的配置启动程序集的选项,例如使用环境变量?

您可以更改WebHostBuilder将查找启动类型的程序集。

使用名称Microsoft.AspNet.Hosting.ini将INI配置文件添加到wwwroot文件夹,其中包含以下内容:

 [Hosting] Application = App.Bootstrapper 

App.Bootstrapper是应用程序引导程序项目的命名空间。

启动类必须看起来相同,例如使用ConfigureServicesConfigure

 public class Startup { public void ConfigureServices(IServiceCollection services) { // ... } public void Configure(IApplicationBuilder app) { // ... } } 

如果您很好奇,可以在此处查看确定启动类型的逻辑。 如果我们在INI文件中指定Hosting:Application键,它将使用该值而不是appEnvironment.ApplicationName

只想关注这一点,在asp.net core rtm中,你既不需要任何.ini也不需要.json,你需要做的就是调用.UseStartup(“NamespaceOfYourStartup”)并确保包含Startup类的程序集在您的asp.net核心Web项目已发布文件的位置相同。