博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于autofac的一些具体的用法
阅读量:7020 次
发布时间:2019-06-28

本文共 2928 字,大约阅读时间需要 9 分钟。

 简介: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每次返回新的实例

 

转载于:https://www.cnblogs.com/dashanboke/p/10791240.html

你可能感兴趣的文章
如何模拟世界 -- 一个奇怪的想法
查看>>
BI笔记之---合理处理SSAS数据库的几点建议
查看>>
Java Web学习总结(8)——使用Cookie进行会话管理
查看>>
python安装
查看>>
Oracle EBS-SQL (BOM-9):检查系统BOM总数.sql
查看>>
PhpStorm 常用快捷键
查看>>
RDP 协议组件 X.224 在协议流中发现一个错误并且中断了客户端连接
查看>>
CentOS yum 源的配置与使用
查看>>
页面内部实现跳转
查看>>
[转] 看懂UML类图和时序图
查看>>
[转] Initial Impressions on GraphQL & Relay
查看>>
su认证失败
查看>>
Java-javaFx库运用-时钟显示
查看>>
【Dart学习】-- Dart之extends && implements && with的用法与区别
查看>>
常用十六进制颜色对照表代码查询
查看>>
扩展性很好的一个分页存储过程
查看>>
如何提升SharePoint 2010的性能
查看>>
asp.net 导出excel 中文乱码解决方法 (转)
查看>>
C#泛型学习笔记
查看>>
char-2
查看>>