Autofac中文文档--一、注册组件--2传递注册参数

官方文档:http://docs.autofac.org/en/latest/register/parameters.html

二、传递注册参数

当你注册组件时能够提供一组参数,可以在解析基于组件的服务时使用。(如果你宁愿在解析时提供参数,你可以这样做)。

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"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值