AutoFac(五)——通过lambda表达式灵活注册
按参数值不同实现不同的注册
一、定义接口
public interface InterfaceDao
{
public virtual void DoSomething(string type) { }
}
二、定义实现类
/// <summary>
/// 唱歌
/// </summary>
public class Sing : InterfaceDao
{
public void DoSomething(string type)
{
Console.WriteLine("Lets Sing");
}
}
/// <summary>
/// 跳舞
/// </summary>
public class Dance : InterfaceDao
{
public void DoSomething(string type)
{
Console.WriteLine("Lets Dance");
}
}
/// <summary>
/// 自由活动
/// </summary>
public class Other : InterfaceDao
{
public void DoSomething(string type)
{
Console.WriteLine("Lets play free");
}
}
三、设定根据不同的参数实现不同的实体进行注册
在本例中,由三个类实现,并且实例化哪个类取决于运行时提供type
static void Main(string[] args)
{
//创建一个容器创建者
var builder = new ContainerBuilder();
//使用lambda表达式注册
builder.Register<InterfaceDao>((c,p) =>
{
//通过不同参数进行不同实例的注册
string type = p.Named<string>("type");
if (type == "dance")
{
return new Dance();
}else if (type == "sing")
{
return new Sing();
}
{
return new Other();
}
});
var service = builder.Build();
using (var scope = service.BeginLifetimeScope())
{
//通过不同参数获取不同的实例
var interfaceDao = scope.Resolve<InterfaceDao>(new NamedParameter("type", "dance"));
interfaceDao.DoSomething("kkk");
}
Console.WriteLine("Hello World!");
}
创建隔离组件的最大好处之一是,具体类型可以多种实现。这通常在运行时完成,而不仅仅是在配置时。
AutoFac(五)——通过lambda表达式灵活注册的更多相关文章
- 在EF中使用Expression自动生成p=>new Entity(){X="",Y="",..}格式的Lambda表达式灵活实现按需更新
一.基本介绍 回忆:最早接触Expression是在学校接触到EF的时候,发现where方法里的参数是Expression<Func<T,bool>>这么一个类型,当 ...
- python语法学习第五天--lambda表达式、filter()、map()
lambda表达式 python使用lamda表达式来创建匿名函数 lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数 语法: lambda [arg1 [,arg ...
- Unity C# 多态 委托 事件 匿名委托 Lambda表达式 观察者模式 .NET 框架中的委托和事件
一.多态 里氏替换原则: 任何能用基类的地方,可以用子类代替,反过来不行.子类能够在基类的基础上增加新的行为.面向对象设计的基本原则之一. 开放封闭原则: 对扩展开放,意味着有新的需求或变化时,可以对 ...
- Java8新特性之一:Lambda表达式
Java8是自java5之后最重大的一次更新,它给JAVA语言带来了很多新的特性(包括编译器.类库.工具类.JVM等),其中最重要的升级是它给我们带来了Lambda表达式和Stream API. 1. ...
- Java8之lambda表达式
一.什么是lambda表达式? Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码 ...
- JAVA 8 主要新特性 ----------------(三)新功能Lambda表达式入门
一.简述 Java为了扩充匿名方法在1.8中新追加的特性.本身Java之前的版本是没有匿名方法的,只有匿名对象. 二.使用 Java中使用匿名方法必须要对应接口中的一个抽象方 ...
- AutoFac使用方法总结一:注册
AutoFac是.net平台下的IOC容器产品,它可以管理类之间的复杂的依赖关系.在使用方面主要是register和resolve两类操作. 这篇文章用单元测试的形式列举了AutoFac的常用使用方法 ...
- 大数据之路week06--day03(jdk8新特性 Lambda表达式)
为什么使用Lambda表达式?(做为初学者接触这个新的语法,会很懵逼,说道理,我在接触到这一块的时候,语法规则我看到了也很懵逼,因为这个和逻辑的关系不是很大,但就是作为一种新的语法出现,一时间很难接受 ...
- .NET中那些所谓的新语法之三:系统预定义委托与Lambda表达式
开篇:在上一篇中,我们了解了匿名类.匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Func/Predicate)和超爱的Lambda表达式.为了方便码农们,. ...
- C# 匿名委托、匿名方法、匿名对象、Lambda表达式
一.匿名类型可通过使用 new 运算符和对象初始值创建匿名类型.示例:var v = new { Name = "Micro", Message = "Hello&quo ...
随机推荐
- 手把手教你编写自定义Categraf插件
本文分享自天翼云开发者社区<手把手教你编写自定义Categraf插件>,作者:任****佳 Categraf 是一个监控采集 Agent,类似 Telegraf.Grafana-Agent ...
- AI+算力,赋予天翼云数字人“最强大脑”!
3月31日至4月1日,以"音视频+无限可能"为主题的LiveVideoStackCon 2022音视频技术大会(北京站)圆满举办.天翼云科技有限公司AI产品研发总监陈金出席&quo ...
- 卸载CentOS7自带的jdk
卸载CentOS7自带的jdk 问题描述 在安装完centOS 7虚拟机后,执行 java -version,发现系统自带jdk8.因为我想使用jdk11,安装并配置环境变量后,环境变量仍显示为jdk ...
- Excel中使用VLOOKUP对两个单元格关联
一.背景 exl中需要关联两个Excel,根据主键合并两个单元格数据 二.使用方法 1.表1---列包含在id.姓名.年龄 2.表2---列包含姓名.性别 3.期望根据[姓名]列为主键,关联两个表数据 ...
- RabbitMQ(十)——消息优先级
RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...
- 个人文件转移工具-来自某位大神的C盘清理神器
软件名称:个人文件转移工具 软件功能:文件转移 支持平台:Windows 软件简介:一款文件转移工具,也可用作C盘瘦身. 软件特点: ◉ "个人文件转移工具"可以把"我的 ...
- Amazon S3 概念及如何集成到 .net 8 C#
Amazon S3(Simple Storage Service)是一个高度可扩展.数据可用性高.安全性强的对象存储服务. Amazon S3 使用对象存储架构,数据以对象的形式存储在桶(bucket ...
- antd vue 嵌套表格之实现每次展开一行
在项目中遇到一个需求,就是使用嵌套子表格时,每次只展示一行,且展开一行另一行收起,直接上代码吧,顺便记录一下 这里需要注意,我们要在外层table组件添加如图三个属性,缺一不可,咳咳,不用杠我那个&l ...
- PaddleOCR学习笔记1
尝试使用PaddleOCR方法,如何使用自定义的模型方法,参数怎么配置,图片识别尝试简单提高识别率方法. 目前仅仅只是初步学习下如何使用PaddleOCR的方法. 一,测试识别图片: 1.png : ...
- HTTP/1.1 优化
避免发送 HTTP 请求 对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响应」的数据都缓存在本地,通过缓存技术减少请求次数. 客户端会把第一次请求以及响应 ...