NET Core 整合Autofac和Castle

NET Core 整合Autofac和Castle

阅读目录

回到目录

前言:

除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle)。

回到目录

1.ASP.NET Core中的Autofac

首先在Project.json的Dependency节点为中添加如下引用:

  1. "Microsoft.Extensions.DependencyInjection": "1.0.0",
  2. "Autofac": "4.1.1",
  3. "Autofac.Extensions.DependencyInjection": "4.0.0",

接着我们也修改Startup文件中的ConfigureServices方法,为了接管默认的DI,我们要为函数添加返回值AutofacServiceProvider;

1.1 ConfigureServices函数

  1. public IServiceProvider ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddApplicationInsightsTelemetry(Configuration);
  4. services.AddMvc();
  5. return RegisterAutofac(services);
  6. }

1.2 RegisterAutofac函数

  1. private IServiceProvider RegisterAutofac(IServiceCollection services)
  2. {
  3. var builder = new ContainerBuilder();
  4. builder.Populate(services);
  5. var assembly = this.GetType().GetTypeInfo().Assembly;
  6. builder.RegisterType<AopInterceptor>();
  7. builder.RegisterAssemblyTypes(assembly)
  8. .Where(type =>
  9. typeof(IDependency).IsAssignableFrom(type) && !type.GetTypeInfo().IsAbstract)
  10. .AsImplementedInterfaces()
  11. .InstancePerLifetimeScope().EnableInterfaceInterceptors().InterceptedBy(typeof(AopInterceptor));
  12. this.ApplicationContainer = builder.Build();
  13. return new AutofacServiceProvider(this.ApplicationContainer);
  14. }

这里IDependency接口是一个空接口,为了扫描到实现这个接口的类,自动完成注入操作。

回到目录

2.整合Castle的DynamicProxy

要实现整合,只需要上面函数中,这段代码:

  1. .EnableInterfaceInterceptors().InterceptedBy(typeof(AopInterceptor));

2.2 引用程序集

显然些程序集还没有Core的对应版本的Autofac.Extras.DynamicProxy,既然说好要整合,就修改一下源代码吧。

Autofac.Extras.DynamicProxy之所以不能支持Core,主要是因为在源码中没有使用新的反射API,GetTypeInfo或使用了一些Remoting的API导致的。

支持Core的Autofac.Extras.DynamicProxy源代码内容和Demo的Github地址如下:

https://github.com/maxzhang1985/AutofacCastle.AspNetCore.Demo

回到目录

3.注意事项

(1).创建Autofac容器时不要忘了将ConfigureServices的返回值修改为IServiceProvider。
(2).对应ASP.NET Core提及的不同的生命周期,Autofac也定义了对应的扩展方法,如InstancePerLifetimeScope等,默认为Transient模式,包括EntityFramwork等Context也是该种模式。
(3).Autofac Core不支持从View中注入,但是可以和ASP.NET Core自带IOC容器配合使用。

GitHub:https://github.com/maxzhang1985/YOYOFx  如果觉还可以请Star下, 欢迎一起交流。

.NET Core 和 YOYOFx 的交流群: 214741894

如果你觉得本文对你有帮助,请点击“推荐”,谢谢.


  1. 如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

分类: .NET Core

时间: 2024-10-06 16:56:40

NET Core 整合Autofac和Castle的相关文章

Ioc容器Autofac系列(2)-- asp.net mvc中整合autofac(转)

经过上篇蜻蜓点水的介绍后,本篇通过实例快速上手autofac,展示当asp.net mvc引入了autofac之后会带来什么. 创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点,为方便起见,选初始带HomeController和AccountController的那种.然后通过NuGet或到Autofac官网下载来引入类库.个人推荐前者,因为从VS2010开始,已内集可视化的NuGet功能,使用起来非常方便.如下图所示: 这是vs2012的界面,点击"Manage NuG

net core 3.1使用autofac及Castle实现Aop切面编程

构建基本项目及引入需要的包文件 autofac在net core 3.1的使用上与2.2有不同,所以在这里记录一下. 先创建一个简单的demo项目,控制台程序及api或者mvc模式都可以. 依次引入依赖包: Autofac:提供容器控制 Autofac.Extensions.DependencyInjection:对autofac依赖注入进行扩展 Autofac.Extras.DynamicProxy:对autofac动态代理进行扩展 Castle.Core:使用动态代理的实现 版本有不一致没关

mvc5整合Autofac

本文中将使用 mvc5与webapi2进行对Autofac整合 准备工作: 1.vs2013 or vs2013+ 2.网络良好,nuget正常访问 好了需要的准备工作就这么多. -----------------------------分割线--------------------------------------- 1.首先新建一个mvc5 与 webapi2 的项目如下图 2.安装相应的插件: 1 <package id="Autofac" version="3

Asp.net mvc中整合autofac

创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点,为方便起见,选初始带HomeController和AccountController的那种.然后通过NuGet或到Autofac官网下载来引入类库.个人推荐前者,因为从VS2010开始,已内集可视化的NuGet功能,使用起来非常方便.如下图所示: 这是vs2012的界面,点击“Manage NuGet Packages…”,弹出窗体如下,在右上角搜索框中输入“Autofac”,找到对应的库点击安装即可.这里需要应用的库有两

.net core 使用Autofac

1.nuget   Autofac Autofac.Extensions.DependencyInjection 2.将Startup.cs中的ConfigureServices返回类型改为IServiceProvider public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddMvc();  可以将下面代码单独放入到一个文件 var builder = new ContainerB

从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之七使用JWT生成Token(个人见解)

在 上一篇中讲到了在NetCore项目中如何进行全局的请求模型验证,只要在请求模型中加了验证特性,接口使用时只用将数据拿来使用,而不用去关系数据是否符合业务需求. 这篇中将讲些个人对于JWT的看法和使用,在网上也能找到很多相关资料和如何使用,基本都是直接嵌到  Startup 类中来单独使用.而博主是将jwt当做一个验证方法来使用.使用起来更加方便,并且在做验证时也更加的灵活. 1.什么是JWT? Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON

NET Core源代码通过Autofac实现依赖注入

查看.NET Core源代码通过Autofac实现依赖注入到Controller属性 阅读目录 一.前言 二.使用Autofac 三.最后 回到目录 一.前言 在之前的文章[ASP.NET Core 整合Autofac和Castle实现自动AOP拦截]中,我们讲过除了ASP.NETCore自带的IOC容器外,如何使用Autofac来接管IServiceProvider进行依赖注入. 最近老有想法在ASP.NET Mvc Core中实现Controller的属性值的依赖注入,但是找遍了Micros

Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能

Autofac 结合 Castle DynamicProxy2 功能 Autofac 不仅作为轻量级高效的 IoC 容器,而且还能很好的与 Castle.DynamicProxy2 结合起来,实现 AOP 功能. 首先,我们需要定义拦截器,简单的定义可实现 Castle.DynamicProxy.IInterceptor 接口即可. 添加拦截器   定义好了拦截器后,如何应用到相关对象呢?有两种方式: 1)使用 Autofac.Extras.DynamicProxy2.InterceptAttr

基于Autofac, Castle.DynamicProxy的动态WCF解决方案(原创)

本方案解决了下面3个主要的问题: 1.减少配置,为了避免每次新增service都需要去修改配置文件,包括服务器端跟各个客户端的. 2.能够使用函数重载,泛型函数,以及泛型类. 3.使项目能够快速地在wcf与直接调用dll之间切换. 整个解决方案分为四块内容:1.客户端,2.契约层,3.服务端,4.实现层 1.客户端:只能看到契约层,而看不到具体的实现:但也可以通过直接引用实现层,从而脱离wcf(需要修改工厂方法,也可以改进一下,通过配置文件来做这个事情,但这个不是本解决方案的重点,有兴趣的可以自