Autofac官方文档(四)【注册组件之将参数传递给注册者】
2017-12-07 17:23
363 查看
在注册组件时,您可以提供一组参数,这些参数可以在解决基于该组件的服务时使用。(如果您希望在解析时提供参数,则可以改为执行此操作。)
假设你有一个配置阅读器需要一个配置部分名称传入:
你可以使用一个lambda表达式组件:
或者你可以传递一个参数给反射组件注册:
在组件注册表达式中,可以通过更改用于注册的委托签名来使用传入参数。 接受一个
When resolving with parameters, your lambda will use the parameters passed in:
解析参数时,lambda将使用传入的参数:
可用的参数类型
Autofac提供了几种不同的参数匹配策略:NamedParameter- 按名称匹配目标参数
TypedParameter- 按类型匹配目标参数(需要完全类型匹配)
ResolvedParameter- 灵活的参数匹配
NamedParameter和
TypedParameter只能提供常量值。
ResolvedParameter可以用作提供从容器动态检索的值的方法,例如, 通过名称解析服务。
参数与反射组件
当您注册基于反射的组件时,该类型的构造函数可能需要一个无法从容器中解析的参数。 您可以在注册中使用参数来提供该值。假设你有一个配置阅读器需要一个配置部分名称传入:
public class ConfigReader : IConfigReader { public ConfigReader(string configSectionName) { //存储配置节名称 } // ...根据段名称读取配置。 }
你可以使用一个lambda表达式组件:
builder.Register(c => new ConfigReader("sectionName")).As<IConfigReader>();
或者你可以传递一个参数给反射组件注册:
//使用NAMED参数: builder.RegisterType<ConfigReader>() .As<IConfigReader>() .WithParameter("configSectionName", "sectionName"); //使用TYPED参数: builder.RegisterType<ConfigReader>() .As<IConfigReader>() .WithParameter(new TypedParameter(typeof(string), "sectionName")); //使用RESOLVED参数: builder.RegisterType<ConfigReader>() .As<IConfigReader>() .WithParameter( new ResolvedParameter( (pi, ctx) => pi.ParameterType == typeof(string) && pi.Name == "configSectionName", (pi, ctx) => "sectionName"));
包含Lambda表达式组件的参数
使用lambda表达式组件注册,而不是在注册时传递参数值,您可以在服务解析时启用该值。 (阅读更多关于解决参数。)在组件注册表达式中,可以通过更改用于注册的委托签名来使用传入参数。 接受一个
IComponentContext和一个
IEnumerable<Parameter>参数,而不仅仅是接受一个
IComponentContext参数:
// 使用TWO参数注册代理: // 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>();
When resolving with parameters, your lambda will use the parameters passed in:
解析参数时,lambda将使用传入的参数:
var reader = scope.Resolve<IConfigReader>(new NamedParameter("configSectionName", "sectionName"));
相关文章推荐
- Autofac中文文档--一、注册组件--2传递注册参数
- Autofac官方文档(五)【注册组件之属性和方法注入】
- Autofac官方文档翻译——(二)组件注册(未完)
- Autofac官方文档(八)【解析服务之传递参数来解析】
- Autofac官方文档(三)【注册组件之注册概念】
- Autofac官方文档(六)【注册组件之程序集扫描】
- Autofac中文文档--二、解析服务--1解析参数传递
- Autofac中文文档--一、注册组件--4组件扫描
- 体验Castle中从配置文件注册组件以及传递参数的一个小例子
- Autofac中文文档--一、注册组件--1注册概念
- .NET手记-Autofac进阶(传递注册参数 Passing Parameters to Register)
- Autofac官方文档(一)【开始】
- 上传组件SWFUpload 2.5.0版 官方说明文档 中文翻译版
- 黑马程序员——面向对象(一)---面向对象、函数的参数传递、static、内部类、文档注释
- element-ui中upload组件如何传递文件及其他参数
- 如何给组件添加事件并传递参数
- Autofac官方文档(七)【解析服务】
- Autofac官方文档(十一)【使用生命周期范围】
- vue 子组件向父组件传递参数
- JSP页面/Apache FileUpload组件上传文件的同时,传递其他参数的方法