关于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和缓存(入坑出坑) 背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...
随机推荐
- background-image属性
background-image 属性 实例,设置body元素的背景图像: body { background-image: url('paper.gif'); background-color: # ...
- 初识C语言(一)
C语言的结构体 一个C程序就是由多个头文件和函数组成 #include<stdio.h> /* 包含头文件*/ int main() { printf('"hello world ...
- form表单获取多选的值
flask 中 form 表单直接获取多选框的值时 language = request.values.getlist('values')或 language=request.from.getlist ...
- sort和priority_queue的比较函数总结
对于priority_queue来说,,比较函数为(如果不是结构体,直接int,优先队列默认的是值越大优先级越大): struct st { string str; int pr, value,mar ...
- 移动 ProgramData\Package Cache 文件夹
装完vs2017 发现C盘快木有空间了… 瞅瞅C盘下有啥能删的好释放下空间 就找到了 Package Cache 文件夹,占用空间接近15G… 查查这个文件夹还不建议删除… (http://super ...
- 安装elasticsearch-7.0.0(centos)
云主机上需设置root密码 sudo passwd root 回车后出入密码两次 jdk11页面 https://www.oracle.com/technetwork/java/javase/down ...
- Java开发人员必须掌握的Linux命令-学以致用(5)
================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...
- ECMA Script 6_模块加载方案 ES6 Module 模块语法_import_export
1. 模块加载方案 commonJS 背景: 历史上,JavaScript 一直没有模块(module)体系, 无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来. 其他语言都有这项功能: ...
- Codeforces Round #524 (Div. 2)
A. Petya and Origamitime limit per test1 secondmemory limit per test256 megabytesinputstandard input ...
- python 格式化向sql语句输出元组
想要往执行的sql语句里传入元组怎么办?尤其像insert 数据等操作,其实 利用"{}".format(tuple)固定格式传值即可 results = ((,,),(,,)) ...