在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
是应用程序引导程序项目的命名空间。
启动类必须看起来相同,例如使用ConfigureServices
和Configure
:
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项目已发布文件的位置相同。
- 从静态工厂类访问ASP.NET Core DI容器
- 无法读取dotnet核心中链接的appsettings.json文件的值
- C#使用foreach访问层次结构的子成员
- ASP NET Core修改/替换请求体
- ASP.NET 5 EntityFramework.Core 7.0.0-rc1-final issue – 编译器想要引用7.0.0.0,但未找到
- asp.net核心defaultProxy
- 如何使用DI在Class Constructor中获取Microsoft.AspNet.Http.HttpContext实例
- 使用Asp.Net Core 2.0中的AllowHtml从数据库生成网页
- 将响应标头添加到ASP.NET核心中间件