简介: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的一些具体的用法的更多相关文章

  1. 第二节:框架前期准备篇之AutoFac常见用法总结

    一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点点小小的风波,我说我的好,他说他的好,非常容 ...

  2. 转载 AutoFac常见用法总结

    第二节:框架前期准备篇之AutoFac常见用法总结   一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势 ...

  3. 框架前期准备篇之AutoFac常见用法总结 转载

    框架前期准备篇之AutoFac常见用法总结 一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点 ...

  4. 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& ...

  5. Using AutoFac

    第一次整理了下关于autofac的一些具体的用法 1. 安装 Autofac: Install-Package Autofac -Version 4.8.1 2. 创建两个类库项目,IService ...

  6. Autofac高级用法之动态代理

    前言 Autofac的DynamicProxy来自老牌的Castle项目.DynamicProxy(以下称为动态代理)起作用主要是为我们的类生成一个代理类,这个代理类可以在我们调用原本类的方法之前,调 ...

  7. 以英雄联盟的方式建模,谈对依赖注入(DI)的理解以及Autofac的用法(一)

    一.前言 近期在探索分层架构和架构设计,选择了领域驱动作为5年.Net开发后的新的方向,不可避免的接触了IoC/DI方面的技术.目前通过反射或其他方法都已实现,但只知其一,并没有考虑为什么要这么做,同 ...

  8. 【转】Autofac高级用法之动态代理

    原文:http://www.cnblogs.com/stulzq/p/8547839.html 前言 Autofac的DynamicProxy来自老牌的Castle项目.DynamicProxy(以下 ...

  9. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

随机推荐

  1. 移动端遮罩及阻止页面滑动,实用!!! 我们经常做一个fixed定位的遮罩和一个提示弹框,这时就要用到。记录--

    document.body.style.height = '100%'; document.body.style.overflow = 'hidden'; document.getElementByI ...

  2. Set集合(scala)

    特点 Set集合最大的特点是:无序 不可重复 定长Set集合 无序 scala> val set = Set(1,5,4,3,7) set: scala.collection.immutable ...

  3. SpringMVC的入门示例

    1.配置流程说明 第一步:导入包 第二步:构建一个请求,编写请求页面 第三步:配置核心控制器 第四步:构建一个业务控制器 第五步:编写Spring配置文件 第六步:编写一个返回页面 2.配置流程--- ...

  4. Eigen::Matrix与array数据转换

    1. 数组转化为Eigen::Matrix ]; cout << "colMajor matrix = \n" << Map<Matrix3i> ...

  5. python之验证码识别 特征向量提取和余弦相似性比较

    0.目录 1.参考2.没事画个流程图3.完整代码4.改进方向 1.参考 https://en.wikipedia.org/wiki/Cosine_similarity https://zh.wikip ...

  6. java实验-3

    实验内容 1.XP基础 2.XP核心实践 3.相关工具 实验内容 一.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己 ...

  7. js下载base64格式的图片(兼容火狐)

    //下载图片 download() { let imgData = 'data:image/png;base64,iVBORw0KGgoAAAANSUh........'; this.download ...

  8. c#堆与栈

    一.在讲堆栈之前,我们先看看值类型和引用类型: 1,我们看看值类型与引用类型的存储方式: 引用类型:引用类型存储在堆中.类型实例化的时候,会在堆中开辟一部分空间存储类的实例.类对象的引用还是存储在栈中 ...

  9. Emgucv - ImageBox控件

    C#的Winform中用来显示图片的控件是PictureBox,而Emgucv中显示图片用的是ImageBox. 1.ImageBox属性 在WinForm中,单击ImageBox控件,右击查看属性页 ...

  10. vue_源码 原理 剖析

    相关基础知识点 // 可以让 任意函数/方法 成功临时指定成对象的方法进行调用 - call/apply // 1. 根据伪数组生成 真数组 const lis = document.getEleme ...