简介: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. 使用DBMS_SHARED_POOL包将对象固定到共享池

    使用DBMS_SHARED_POOL包将对象固定到共享池2011年06月24日 09:45:00 Leshami 阅读数:5808 版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处. htt ...

  2. 设计模式学习之享元模式(Flyweight,结构型模式)(20)

    转:http://terrylee.cnblogs.com/archive/2006/03/29/361767.html 摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是 ...

  3. CentOS系统安全加固常见方法

    关于Linux系统安全加固的具体实现脚本及基线检查规范,以供主机维护人员参考学习. 其中以下脚本主要实现的功能包括: *加固项包括:密码长度.session超时时间.删除不用的帐号和组.限制root用 ...

  4. LeetCode 709.To Lower Case

    Description Implement function ToLowerCase() that has a string parameter str, and returns the same s ...

  5. docker 安装mongo

    1.docker安装参考docker官网教程 2.docker中获取mongo镜像 sudo pull mongo 3.通过run命令新建/启动容器,容器名称为mongo,本地宿主机如果27017端口 ...

  6. LBS(Location Based Service)(基于位置的服务)

    LBS(Location Based Service)(基于位置的服务) Android 中定位方式基本可以分为两种:GPS定位,网络定位. GPS定位的工作原理是基于手机内置的GPS硬件直接和卫星进 ...

  7. PostgreSQL自学笔记:5 数据类型和运算符

    5 数据类型和运算符 5.1 PostgreSQL 数据类型介绍 5.1.1 整数类型 整型类型 字节 取值范围 smallint 2字节 -2^15 ~ 2^15 int integer 4字节 - ...

  8. Class.forName()+Class.forName().newlnstance()和new语句和初始化块+static初始化块+构造方法之间的关系

    先上代码 class A{     int a;     static {System.out.println("载入类时执行");}     public A() {       ...

  9. phantomjs 中文文档

    phantomjs 中文文档 转载 入门教程:转载 http://www.cnblogs.com/front-Thinking/p/4321720.html 1.介绍 简介   PhantomJS是一 ...

  10. 解决ajax 跨域请求问题

    浏览器console报错: has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is 解决: 服务端加入代 ...