Autofac官方文档翻译--一、注册组件--2传递注册参数
官方文档:http://docs.autofac.org/en/latest/register/parameters.html
二、Autofac 传递注册参数
当你注册组件时能够提供一组参数,可以在解析基于组件的服务时使用。(如果你宁愿在解析时提供参数,你可以这样做)。
1、有效的参数类型(Available Parameter Types)
Autofac提供数个不同的参数匹配策略:
- NamedParameter - 通过名称匹配目标参数
- TypedParameter - 通过类型匹配目标参数(需要精确匹配类型)
- ResolvedParameter - 灵活的参数匹配
NamedParameter和TypedParameter提供唯一不变的值
ResolvedParameter可以作为从容器提供动态检索值的一种方法,如通过名称解析服务。
2、反射组件参数(Parameters with Reflection Components)
当注册反射组件时,该类型的构造函数可能需要一个参数,此参数不能从容器解析,你需要使用一个参数在注册的时候提供这个值。
public class ConfigReader : IConfigReader
{
public ConfigReader(string configSectionName)
{
// 存储配置的节点名称
} // ...读取基于节点名称的配置
}
你可以使用lambda表达式来注册:
builder.Register(c => new ConfigReader("sectionName")).As<IConfigReader>();
或者你可以在反射组件注册时传入一个参数:
// 使用一个命名参数:
builder.RegisterType<ConfigReader>()
.As<IConfigReader>()
.WithParameter("configSectionName", "sectionName"); // 使用一个类型参数:
builder.RegisterType<ConfigReader>()
.As<IConfigReader>()
.WithParameter(new TypedParameter(typeof(string), "sectionName")); // 使用一个解析参数:
builder.RegisterType<ConfigReader>()
.As<IConfigReader>()
.WithParameter(
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(string) && pi.Name == "configSectionName",
(pi, ctx) => "sectionName"));
3、Lambda表达式组件参数(Parameters with Lambda Expression Components)
使用表达式组件注册,不是在注册时传入参数,你可以在服务解析时传入参数。
在组件注册表达式中,你可以通过改变委托签名使用传入参数进行注册,代替仅仅接收一个IComponentContext参数,一个IComponentContext 和 IEnumerable<Parameter>参数:
// 使用两个参数来注册委托
// c = The current IComponentContext to dynamically resolve dependencies
// p = An IEnumerable<Parameter> with the incoming parameter set
builder.Register((c, p) =>
new ConfigReader(p.Named<string>("configSectionName")))
.As<IConfigReader>();
当你解析参数时,你的lambda将使用这些参数来传入值:
var reader = scope.Resolve<IConfigReader>(new NamedParameter("configSectionName", "sectionName"));
Autofac官方文档翻译--一、注册组件--2传递注册参数的更多相关文章
- Autofac官方文档翻译--一、注册组件--1注册概念
官方文档:http://docs.autofac.org/en/latest/register/registration.html 一.注册概念 使用Autofac 注册组件,通过创建一个Contai ...
- Autofac官方文档翻译--一、注册组件--4组件扫描
官方文档:http://docs.autofac.org/en/latest/register/scanning.html Autofac 组件扫描 在程序集中Autofac 可以使用约定来找到并注册 ...
- Autofac官方文档翻译--二、解析服务--2隐式关系类型
Autofac 隐式关系类型 Autofac 支持自动解析特定类型,隐式支持组件与服务间的特殊关系.要充分利用这些关系,只需正常注册你的组件,但是在使用服务的组件或调用Resolve()进行类型解析时 ...
- Autofac官方文档翻译--二、解析服务--1解析参数传递
Autofac 传递解析参数 注册组件公开相应的服务之后,你可以从container构造器和子lifetime scopes 中解析服务.使用Resolve()方法来实现: var builder = ...
- Autofac官方文档翻译--一、注册组件--3属性和方法注入
官方文档:http://docs.autofac.org/en/latest/register/prop-method-injection.html Autofac 属性和方法注入 虽然构造函数参数注 ...
- Haproxy官方文档翻译(第三章)全局参数(1) 附英文原文
3.全局参数 在global这个节点里的参数是“进程范围的”并且经常是“操作系统指定”的.它们通常是一次性设置而且一旦正确设置不需要动来动去的.它们中的一些和命令行对应. global节点支持以下关键 ...
- Ioc容器Autofac系列(3)-- 三种注册组件的方式
简单来说,所谓注册组件,就是注册类并映射为接口,然后根据接口获取对应类,Autofac将被注册的类称为组件. 虽然可像上篇提到的一次性注册程序集中所有类,但AutoFac使用最多的还是单个注册.这种注 ...
- vue组件化之模板优化及注册组件语法糖
vue组件化之模板优化及注册组件语法糖 vue组件化 模板 优化 在 https://www.cnblogs.com/singledogpro/p/12054895.html 这里我们对vue.js ...
- .NET手记-Autofac进阶(传递注册参数 Passing Parameters to Register)
当你注册组件时,可以为组件服务传入一系列参数,用于服务解析时使用. 可使用的参数类型 Available Parameter Types Autofac提供了集中参数匹配类别: NamedParame ...
随机推荐
- Mockito 结合 Springboot 进行应用测试
Spring Boot可以和大部分流行的测试框架协同工作:通过Spring JUnit创建单元测试:生成测试数据初始化数据库用于测试:Spring Boot可以跟BDD(Behavier Driven ...
- Java基础教程——线程状态
线程状态 JAVA定义了6种线程状态: Thread.State public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, ...
- windowsAPI函数操作注册表实现软件开机自启
注册表的结构 注册表是一个数据库,它的结构同逻辑磁盘类似.注册表包含键(Key),它类似磁盘中的目录,注册表还包含键值(Value),它类似磁盘中的文件.一个键可以包含多个子健和键值,其中键值用于存储 ...
- oracle set oracle_sid=xxxxxx
本地有多个实例,在cmd 输入 set oracle_sid=xxxxx 来指定要连接的实例 sqlplus xxxx/xxxx@1.1.1.1.1/sid 连接数据库
- 2020.11.30【NOIP提高A组】模拟赛反思
90,rk42 T1 考试的时候觉得可以贪心,就每次找到最大的,然后以它为根去遍历每个子树,求出其最大值,然后删去这个点.一直持续直到边删完,时间复杂度\(O(n^2)\),然后想了想链的情况,没有打 ...
- Netty 心跳处理
传统的心跳包设计,基本上是服务端和客户端同时维护 Scheduler,然后双方互相接收心跳包信息,然后重置双方的上下线状态表.此种心跳方式的设计,可以选择在主线程上进行,也可以选择在心跳线程中进行,由 ...
- vue中全局/按需引用element,样式都不生效
简直是天坑啊,这个问题困扰了我一个晚上加今天一天,心里无数草泥马奔腾 被要求使用vue1.0+elementUI做一个后台管理项目,结果无论怎么操作elementUI,页面中都不显示css样式 谷歌百 ...
- vm虚拟机安装centos7。克隆镜像以及快照
为了方便下次安装配置,保存一篇安装centos的文章 https://blog.csdn.net/wsq119/article/details/80635558 步骤非常详细,一看就会. 这一篇是关于 ...
- pycharm 2018.2.4过期-激活处理方式(Axure8.0版本到期)
参考文章:https://blog.csdn.net/HALEN001/article/details/81137092 第一种方法亲测可以 大致步骤: 1.2018.8.15更新最新破解补丁Jetb ...
- swagger添加统一认证参数
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Co ...