博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET领域最为流行的IOC框架之一Autofac
阅读量:6303 次
发布时间:2019-06-22

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

一、前言

Autofac是.NET领域最为流行的IOC框架之一,微软的Orchad开源程序使用的就是Autofac,Nopcommerce开源程序也是用的Autofac。

Orchad和Nopcommerce在用Autofac的时候进行封装,看过源码的都知道Autafac使用简单,功能强大。

建议下载Orchad和Nopcommerce学习下源码:附上下载地址

和其他IOC对比:

Unity:微软patterns&practicest团队开发的IOC依赖注入框架,支持AOP横切关注点。

MEF(Managed Extensibility Framework):是一个用来扩展.NET应用程序的框架,可开发插件系统。

Spring.NET:依赖注入、面向方面编程(AOP)、数据访问抽象,、以及ASP.NET集成。

PostSharp:实现静态AOP横切关注点,使用简单,功能强大,对目标拦截的方法无需任何改动。

Autofac:最流行的依赖注入和IOC框架,轻量且高性能,对项目代码几乎无任何侵入性。

下面介绍Autofac的使用

二、Autofac使用

新建一个mvc的项目,使用nuget安装Autofac,需要安装Autofac和Autofac ASP.NET MVC5 Intergration 

安装完成后引用里面就多了Autofac.dll和Autofac.Intergration.MVC,如果是在webApi里使用Autofac需要安装Autofac ASP.NET Web API2.2 Intergration 才可以。

新建一个person实体类

public class Person    {        public int Id { get; set; }        public string Name { get; set; }        public int Age { get; set; }        public string Address { get; set; }    }

新建一个person仓储接口

public interface IPersonRepository    {        IEnumerable
GetAll(); Person Get(int id); Person Add(Person item); bool Update(Person item); bool Delete(int id); }

新建实现

public class PersonRepository : IPersonRepository    {        List
person = new List
(); public PersonRepository() { Add(new Person { Id = 1, Name = "joye.net1", Age = 18, Address = "中国上海" }); Add(new Person { Id = 2, Name = "joye.net2", Age = 18, Address = "中国上海" }); Add(new Person { Id = 3, Name = "joye.net3", Age = 18, Address = "中国上海" }); } public IEnumerable
GetAll() { return person; } public Person Get(int id) { return person.Find(p => p.Id == id); } public Person Add(Person item) { if (item == null) { throw new ArgumentNullException("item"); } person.Add(item); return item; } public bool Update(Person item) { if (item == null) { throw new ArgumentNullException("item"); } int index = person.FindIndex(p => p.Id == item.Id); if (index == -1) { return false; } person.RemoveAt(index); person.Add(item); return true; } public bool Delete(int id) { person.RemoveAll(p => p.Id == id); return true; } }

Global属性注入

public class MvcApplication : System.Web.HttpApplication    {        private void SetupResolveRules(ContainerBuilder builder)        {            builder.RegisterType
().As
(); } protected void Application_Start() { var builder = new ContainerBuilder(); SetupResolveRules(builder); builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired(); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } }

最好获取数据结果;

三、总结

文中只是给出了一个简单的注入实现,剩下的可以自己去研究下,构造函数注入,方法注入

泛型注入,所有程序集注入,都可以看下,

也可以把文章开头的两个开源的项目下载下来研究里面的Autofac注入方式。

 

转载地址:http://owfxa.baihongyu.com/

你可能感兴趣的文章
C++ map和unordered_map自定义key
查看>>
TCP协议之<你好——再见>
查看>>
如何在 Bash 中删除“除某些文件外的所有文件”?
查看>>
IIS 7.0配置PHP环境
查看>>
duird.io 支持不同版本的 hadoop
查看>>
apache基于域名的虚拟主机配置
查看>>
Docker的技术组件
查看>>
F5 LTM iControl REST APi Url 自动化,查看,增加,启停,Pool&Member&irule
查看>>
Redux框架浅析
查看>>
JS获取鼠标坐标
查看>>
URL太长导致参数被截断的问题
查看>>
关于qt中的tr()函数
查看>>
CSS自适应表格样式
查看>>
LAMP编译安装Apache Mysql php
查看>>
C++标识符的命名规则
查看>>
Proxmox Mail Gateway 自定义关键字
查看>>
[摘录]在windows下安装phpunit
查看>>
修改版本号解决“IE”无法重装的问题(转载)
查看>>
下载网页,或者监控的工具
查看>>
rsync+inotify实现实时同步
查看>>