关于autofac的一些具体的用法
简介:Autofac是一个.net下非常优秀,性能非常好的IOC容器(.net下效率最高的容器)
1.nuget 引用

2.创建两个类库项目,IService (用于编写接口),ServiceImpl(用于创建实现类)
public class IService
{
public interface IAnimalBark
{
void Bark();
}
public interface IAnimalSleep
{
void Sleep();
}
public interface IUser
{
void AddNew(string name, string pwd);
}
public interface ISchool
{
void AfterSchool();
}
}
实现类
public class ServiceImpl :IService
{
public class Cat : IAnimalBark
{
public void Bark()
{
Console.WriteLine("喵喵喵");
}
}
public class Dog : IAnimalBark, IAnimalSleep
{
public void Bark()
{
Console.WriteLine("汪汪汪汪汪");
}
public void Sleep()
{
Console.WriteLine("zZ,睡着了");
}
}
public class User : IUser
{
public void AddNew(string name, string pwd)
{
Console.WriteLine("添加新的用户:" + name);
}
}
public class School : ISchool
{
public IAnimalBark Dog { get; set; }
public void AfterSchool()
{
Dog.Bark();
Console.WriteLine("放学了");
}
}
}
//1.单个注册
//ContainerBuilder builder = new ContainerBuilder();
////注册实现类Dog,当我们 请求IAnimalBark接口 的时候返回的是类Dog的对象,原理性的代码
//builder.RegisterType<Dog>().As<IAnimalBark>();
//IContainer container = builder.Build();
////请求接口
//IAnimalBark bark = container.Resolve<IAnimalBark>();//解析
//bark.Bark();
//Console.ReadKey();
//2.多个注册 直接可以注册程序集名称
//ContainerBuilder builder = new ContainerBuilder(); //容器
//var atype = typeof(ServiceImpl);
// string namespacea=atype.Assembly.ToString();
//Assembly asm = Assembly.Load(namespacea);//实现类所在的程序集名称
//builder.RegisterAssemblyTypes(asm).AsImplementedInterfaces();//常用
//IContainer container = builder.Build();
//IAnimalBark bark = container.Resolve<IAnimalBark>();
//IUser user = container.Resolve<IUser>();
//bark.Bark();
//user.AddNew("B1111","123");
//3..如果有多个实现类,container.Resolve<IAnimalBark>();只会返回其中一个对象
//,如果想返回多个类的对象,应改成container.Resolve<IEnumerable<IAnimalBark>>();
//ContainerBuilder builder = new ContainerBuilder(); //容器
//var atype = typeof(ServiceImpl);
//string namespacea = atype.Assembly.ToString();
//Assembly asm = Assembly.Load(namespacea);//实现类所在的程序集名称
//builder.RegisterAssemblyTypes(asm).AsImplementedInterfaces();//常用
//IContainer container = builder.Build();
////返回一个接口
//IEnumerable<IAnimalBark> animals = container.Resolve<IEnumerable<IAnimalBark>>();
//foreach (var a in animals) {
// a.Bark();
////}
//4.如果一个实现类中定义了其他类型的属性(接口类型的属性),在注册时又加上builder.RegisterAssemblyType
// s(asm).AsImplementedInterfaces().PropertiesAutowired(); 这样会给属性进行“注入”
ContainerBuilder builder = new ContainerBuilder(); //容器
var atype = typeof(ServiceImpl);
string namespacea = atype.Assembly.ToString();
Assembly asm = Assembly.Load(namespacea);//实现类所在的程序集名称
builder.RegisterAssemblyTypes(asm).AsImplementedInterfaces().PropertiesAutowired();//常用 允许属性写入
IContainer container = builder.Build();
//返回一个接口
ISchool school = container.Resolve<ISchool>();
school.AfterSchool();
//如果一个接口 有多个实现方法,调用会以最后一个实现的方法为准
//自定义生命周期
//SingleInstance 每次resolve返回同一个对象 InstancePerDependency每次返回新的实例
关于autofac的一些具体的用法的更多相关文章
- 第二节:框架前期准备篇之AutoFac常见用法总结
一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点点小小的风波,我说我的好,他说他的好,非常容 ...
- 转载 AutoFac常见用法总结
第二节:框架前期准备篇之AutoFac常见用法总结 一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势 ...
- 框架前期准备篇之AutoFac常见用法总结 转载
框架前期准备篇之AutoFac常见用法总结 一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点 ...
- List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac
List多个字段标识过滤 class Program{ public static void Main(string[] args) { List<T> list = new List& ...
- Using AutoFac
第一次整理了下关于autofac的一些具体的用法 1. 安装 Autofac: Install-Package Autofac -Version 4.8.1 2. 创建两个类库项目,IService ...
- Autofac高级用法之动态代理
前言 Autofac的DynamicProxy来自老牌的Castle项目.DynamicProxy(以下称为动态代理)起作用主要是为我们的类生成一个代理类,这个代理类可以在我们调用原本类的方法之前,调 ...
- 以英雄联盟的方式建模,谈对依赖注入(DI)的理解以及Autofac的用法(一)
一.前言 近期在探索分层架构和架构设计,选择了领域驱动作为5年.Net开发后的新的方向,不可避免的接触了IoC/DI方面的技术.目前通过反射或其他方法都已实现,但只知其一,并没有考虑为什么要这么做,同 ...
- 【转】Autofac高级用法之动态代理
原文:http://www.cnblogs.com/stulzq/p/8547839.html 前言 Autofac的DynamicProxy来自老牌的Castle项目.DynamicProxy(以下 ...
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程
反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) 背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...
随机推荐
- 【oracle唯一主键SYS_GUID()】
现在给大伙介绍另外的一钟防止主键相同的方法. 唯一主键 使用 SYS_GUID() 生成32位的唯一编码.来生成唯一主键 例如: create table test ( id raw(16) defa ...
- vmware安装centOs操作系统配置网络的一系列问题
1:最近公司在测试项目,需要在linux操作系统上面测试,可惜自己之前学linux操作系统不是很深,配置网络也不是很熟练,网上方法太多,但是不是很好用,确实难为了自己一把,在这里自己总结一下配置网络的 ...
- Linux 查看负载内存
负载 内存 1.作用 top命令用来显示执行中的程序进程,使用权限是所有用户. 2.格式 top [-] [d delay] [q] [c] [S] [s] [i] [n] 3.主要参数 ...
- Maximum Average Subarray I
https://leetcode.com/problems/maximum-average-subarray-i/#/description 求指定长度为 k 的子数组的最大均值,基本思路是用长度为k ...
- idea整合 spring boot jsp mybatis
spring boot 开发起来确实要简单许多 ,spring boot 包含了 spring mvc ;内置tomcat ;启动只需要主方法即可 1.使用idea新建一个spring bo ...
- Torch功能点记录
1. Numpy矩阵转换Tensor: tensor_num = torch.from_numpy(numpy_arr)
- 12树莓派VNC远程桌面
2017-09-04 23:11:28 http://bbs.elecfans.com/forum.php?mod=viewthread&tid=583803&extra= 开 ...
- ORACLE11g 重装系统后根据dbf恢复数据库
1.安装一个和原系统一致的oracle 环境,主要包括版本.数据名sid.实例名.路径和数据库编码一致 2.修改listener.ora的参数 SID_LIST_LISTENER = (SID_LIS ...
- ICL2019E
https://www.codechef.com/ICL2019/problems/ICL1906 两个整数,[0,1e5]操作1是让两个数同时减1(只有都大于0的时候才可以用)操作2可以让一个数乘 ...
- JavaScript 中 replace方法 替换所有字符串
需要替换一个字符串中所有的某个字符串 java中使用replaceAll()方法就可以了.但是JavaScript中没有replaceAll方法 但是可以通过以下方法实现: /** * 空格替换为下划 ...