加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

深入探究ASP.NET Core Startup初始化问题

发布时间:2020-12-10 20:54:59 所属栏目:编程 来源:网络整理
导读:这篇文章首要先容了深入探讨ASP.NET Core Startup初始化题目,本文给各人先容的很是具体,对各人的进修或事变具有必然的参考小心代价,必要的伴侣可以参考下

假如你在ASP.NET Core 3.1中行使过Autofac那么你对ConfigureContainer要领必然不生疏,它和ConfigureServices、Configure要领一样的神奇,在险些没有任何束缚的环境下我们只必要界说ConfigureContainer要领并为要领转达一个ContainerBuilder参数,那么这个要领就能顺遂的被挪用了。这统统毕竟是怎样实现的呢,接下来我们继承探讨源码,找到了如下的逻辑
[点击查察源码👈]

//按照法则查找最终返回ConfigureContainerBuilder实例 var configureContainerBuilder = StartupLoader.FindConfigureContainerDelegate(startupType, context.HostingEnvironment.EnvironmentName); if (configureContainerBuilder.MethodInfo != null) { //获取容器范例好比假如是autofac则范例为ContainerBuilder var containerType = configureContainerBuilder.GetContainerType(); // 存储configureContainerBuilder实例 _builder.Properties[typeof(ConfigureContainerBuilder)] = configureContainerBuilder; //构建一个Action<HostBuilderContext,containerType>范例的委托 var actionType = typeof(Action<,>).MakeGenericType(typeof(HostBuilderContext), containerType); // 获取此范例的私有ConfigureContainer要领,然后声明该要领的泛型为容器范例,然后建设这个要领的委托 var configureCallback = GetType().GetMethod(nameof(ConfigureContainer), BindingFlags.NonPublic | BindingFlags.Instance) .MakeGenericMethod(containerType) .CreateDelegate(actionType, this); // 等同于执行_builder.ConfigureContainer<T>(ConfigureContainer),个中T为容器范例。 //C onfigureContainer暗示一个委托,即我们在Startup中界说的ConfigureContainer委托 typeof(IHostBuilder).GetMethods().First(m => m.Name == nameof(IHostBuilder.ConfigureContainer)) .MakeGenericMethod(containerType) .InvokeWithoutWrappingExceptions(_builder, new object[] { configureCallback }); }

继承行使老配方,我们查察StartupLoader的FindConfigureContainerDelegate要领实现
[点击查察源码👈]

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读