首页 > 编程语言 >asp.net core 7+ 调用类库的控制器

asp.net core 7+ 调用类库的控制器

时间:2024-03-06 17:25:57浏览次数:26  
标签:类库 core 控制器 asp ControllerBase ioc builder typeof type

直入主题 ,用原版ioc的话只需要现在类库中引用包

 然后就和普通控制器一样,继承ControllerBase,然后标记上特性就可以使用

 

如果是使用autofac作为ioc,那么就要稍微改一下

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

使用autofac代替默认的ioc容器

    builder.Host.ConfigureContainer<ContainerBuilder>(x =>
    {
        x.RegisterType<Data>().As<IData>().PropertiesAutowired();//正常注入代码       
    });

如果使用构造函数注入的话,那么就搞定了

如果你要是用属性注入,代码还需要修改一下

 builder.Host.ConfigureContainer<ContainerBuilder>(x =>
 {
     x.RegisterType<Data>().As<IData>().PropertiesAutowired();//正常注入代码

     var controllersTypesInAssembly = typeof(WebAp.Program).Assembly.GetExportedTypes()
     .Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();

     var controllersTypesInAssembly2 = typeof(APiClassLibrary.CAController).Assembly.GetExportedTypes()
     .Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();

     x.RegisterTypes(controllersTypesInAssembly).PropertiesAutowired();
     x.RegisterTypes(controllersTypesInAssembly2).PropertiesAutowired();
 });

我这里项目分为

 WebAp和APiClassLibrary里面都有控制器,因此需要分别获取他们的程序集,然后筛选里面继承了ControllerBase的类,最后在注册在ioc里面.

获取程序集也可以通过这种方式.

 Assembly.Load("*.*.*").GetExportedTypes().Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();

 

最后需要流式调用方法 AddControllersAsServices()把控制器作为类通过ioc注册

 builder.Services.AddControllers()
     .AddControllersAsServices();

网上有些代码写得是这段代码

 builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());

可以直接使用上面的 .AddControllersAsServices() 这个的源码里包括了上面的代码

 做完这些 就可以愉快的使用autofac属性注入,并且控制器和项目分离了

 

标签:类库,core,控制器,asp,ControllerBase,ioc,builder,typeof,type
From: https://www.cnblogs.com/czb071/p/18057048

相关文章

  • .NETCore文件上传将文件保存到docker容器以外的文件夹
    最近在开发一个文件服务,用于公司内容各应用的文件保存和查询获取。开发环境:windows10+.NETCore7.0+Mysql  发布环境:Liunx+Docker实现功能:文件服务提供接口上传文件和下载文件,服务用于内网访问。实现中遇到的问题:由于文件保存是用的系统自带文件服务。而部署环境是Liunx+Doc......
  • 深入解析ASP.NET Core MVC的模块化设计[下篇]
    ASP.NETCoreMVC的“模块化”设计使我们可以构成应用的基本单元Controller定义在任意的模块(程序集)中,并在运行时动态加载和卸载。《设计篇》介绍了这种为“飞行中的飞机加油”的方案的实现原理?本篇我们将演示将介绍“分散定义Controller”的N种实现方案。源代码从这里下载。一、标......
  • .NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移、属性导航
    一、创建asp.netcoreweb(MVC)项目二、导包Microsoft.EntityFrameworkCore.DesignMicrosoft.EntifyFrameworkCore.ToolsPomelo.EntityFrameworkCore.MySql三、创建实例这里创建了两个实例namespacedemo.Models{publicclassSupplier{[DatabaseGe......
  • 开源:Taurus.Idempotent 分布式幂等性锁框架,支持 .Net 和 .Net Core 双系列版本
    分布式幂等性锁介绍:分布式幂等性框架的作用是确保在分布式系统中的操作具有幂等性,即无论操作被重复执行多少次,最终的结果都是一致的。幂等性是指对同一操作的多次执行所产生的效果与仅执行一次的效果相同。以下是分布式幂等性框架的主要作用:避免重复操作:在分布式系统中,由于......
  • .Net Core(七) 管道和中间件
    简介管道.NETCore中的管道是一个用于处理HTTP请求的组件。它是ASP.NETCore应用程序的核心部分,负责将传入的HTTP请求传递给适当的处理程序并生成响应。管道由一系列中间件组成,每个中间件都可以对请求或响应进行操作,然后将其传递给下一个中间件或终止请求处理。中间件......
  • 【HMS Core】集成推送服务,打包后应用名乱码
    ​【问题描述】使用flutter进行移动端开发,导入了agconnect-services.json之后,成功集成了华为推送,但是应用打包如果应用名为中文,debug包生成的应用名会是乱码。​​ 【问题分析】1、经推测可能是agc插件与开发者引入的另外的sdk相冲突导致的,但即使去掉其他的sdk也会导致该问......
  • asp.net core 中基于策略的授权-自定义授权
    前两篇文章扫盲篇,进阶篇中介绍了基本的asp.netcore中基于策略的授权的使用方法。使用策略授权时,只能指定策略,不能配置其他信息。[Authorize(Policy="AtLeast21")]//指定要验证的策略publicclassAlcoholPurchaseController:Controller{publicIA......
  • NetCore3.1 引入PostgerSql + DbFirst
    十年河东,十年河西,莫欺少年穷学无止境,精益求精1、新建控制台项目PostgreSQLApp,引入如下包<ProjectSdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>netcoreapp3.1</TargetFramework></Prope......
  • ASP.NET Core - 配置系统之配置读取
    一个应用要运行起来,往往需要读取很多的预设好的配置信息,根据约定好的信息或方式执行一定的行为。配置的本质就是软件运行的参数,在一个软件实现中需要的参数非常多,如果我们以HardCode(硬编码)的方式写在应用代码中,这样配置就会很乱,而且后续也不容易修改。乱而多,而且不容易修改,......
  • ASP.NET Core策略授权和ABP授权
    首先我们来创建一个WebAPI应用。然后引入Microsoft.AspNetCore.Authentication.JwtBearer包。策略Startup类的ConfigureServices方法中,添加一个策略的形式如下:services.AddAuthorization(options=>{options.AddPolicy("AtLeast21",policy=>......