zoukankan      html  css  js  c++  java
  • 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"));
     
     
  • 相关阅读:
    从数据库表导出为excel表格
    特别好用的eclipse快捷键
    Oracle安装后出现的问题
    Linux系统(X32)安装Oracle11g完整安装图文教程另附基本操作
    Java导出引用jar包的文件
    poi读取、通过poi导出数据库的记录到excl表
    Oracle数据库体系结构(7) 表空间管理1
    Oracle数据库体系结构(6)数据库归档重做日志文件管理
    5 重做日志文件
    Oracle数据库体系结构(4)oracle控制文件
  • 原文地址:https://www.cnblogs.com/nimorl/p/12626467.html
Copyright © 2011-2022 走看看