Csharp/C#教程:获取Startup.cs对象的参考分享


获取Startup.cs对象的参考

寻找知道ASP.NET MVC内部细节的高级ASP.NET架构师的答案。

这是标准ASP.NET核心应用程序的框架。

var config = new ConfigurationBuilder() .AddCommandLine(args) .AddEnvironmentVariables(prefix: "ASPNETCORE_") .Build(); var host = new WebHostBuilder() .UseConfiguration(config) .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup() .Build(); host.Run(); 

在这篇文章中,ASP.NET设备实例化了一个Startup.cs类的实例

 .UseStartup() 

我的查询是如何获取(引用)这个已经实例化的Startup对象实例,我可以插入到我的Library / Framework中。

上下文是设置一些Uber级别框架并获得此联结(Startup.cs)的引用,其中所有请求都已启动。

如果您的Startup实现了IStartup接口,那么很容易获得对它的引用:

 var host = new WebHostBuilder() .UseConfiguration(config) .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup() .Build(); var startup = host.Services.GetService(typeof(IStartup)); // or from any other part of code using IServiceProvider. 

但是,asp.net核心不需要您的启动类来实现此接口。 如果没有 – 它将使用适配器模式并使您的Startup类适应IStartup接口。 你仍然会有一个IStartup实例,但它不是你的Startup类。 相反,它将是ConventionBasedStartup一个实例。 Asp.net核心将探索你的启动类的方法,找到ConfigureConfigureServices方法,并将它们传递给ConventionBasedStartup ,它将使它们适应IStartup接口。 在这种情况下,不能在没有大量reflection的情况下检索启动类的实例,因为它实际上并不存储在ConventionBasedStartup任何字段(甚至是私有)中,并且只能通过委托引用来访问。

长话短说 – 如果你想获得你的Startup类的实例 – 让它实现IStartup接口。

有关如何实现IStartup接口的更新:

上述就是C#学习教程:获取Startup.cs对象的参考分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 public class Startup : IStartup { public Startup(IHostingEnvironment env) { // constructor as usual var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); } public IConfigurationRoot Configuration { get; } public void Configure(IApplicationBuilder app) { app.UseMvc(); // resolve services from container var env = (IHostingEnvironment) app.ApplicationServices.GetService(typeof(IHostingEnvironment)); var logger = (ILoggerFactory)app.ApplicationServices.GetService(typeof(ILoggerFactory)); logger.AddConsole(Configuration.GetSection("Logging")); logger.AddDebug(); // etc } public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddMvc(); // etc // return provider return services.BuildServiceProvider(); } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1024835.html

(0)
上一篇 2022年1月8日
下一篇 2022年1月8日

精彩推荐