C# .NET Core API Controller以及辅助专案

准备工作

  1. Windows 10
  2. Visual Studio 2019(2017就有可以集中发布到publish目录的功能了吧)
  3. C#
  4. 将方法封装(据说可以提高效率,就像是我们用的dll那种感觉
  5. 新增专案作为我们API的辅助专案(作用类似dll,此处,你也可以在你自己的API专案里建文件夹,但这样据说没有效果,我也不知道是不是真的,只能麻烦点,再新增专案啰)

在你创建一个空白的API专案后,这个专案会自动继承ControllerBase 类,补第一个专案的图,因为有时候自己见一个.cs的类,不会自动继承,所以就需要手动添加,不过现在升级了,可以直接建control。

  • 在系统里直接建Controller类

新增专案

​ 不想太麻烦的,就自己新建文件夹,自己调用就好,就不用建这么多专案。

​ 在新增专案前,先迁移一下之前的项目。之前是D:\WEB_CODE\RMS\,我在此再建了一层目录,此时,xml文件的路径也需要重新勾选。

​ 给大家看下完整建好后的文件夹

新增IServices专案

新增Services专案

新增Model专案


版本冲突


专案引用

具体的引用要看你需要用到那个专案,这是你自己设定的联系。


csharp 复制代码
using Autofac;
using Autofac.Extensions.DependencyInjection;

namespace RMS
{
    public class Startup
    {
        
        // 为ConfigureServices方法添加新的注入,且将返回类型void改为 IServiceProvider 
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        { 
            //使用Autofac實現IOC
            var containerBuilder = new ContainerBuilder();
            //模塊化注入
            containerBuilder.RegisterModule<HelpTool.AutofacModuleRegister>();
            containerBuilder.Populate(services);
            var container = containerBuilder.Build();
            return new AutofacServiceProvider(container);
        }
    }
}
csharp 复制代码
using Autofac;
using System.Linq;
using System.Reflection;

namespace HelpTool
{
    public class AutofacModuleRegister : Autofac.Module
    {
        protected override void Load(ContainerBuilder builder)
        { 
            //動態註入服務
            builder.RegisterAssemblyTypes(Assembly.Load("IServices"), Assembly.Load("Services"))
              .Where(t => t.Name.EndsWith("Service"))//注入cs文件以Service结尾的
              .AsImplementedInterfaces(); 
        }
    }
}

方法调用

复制代码
https://localhost:44372/api/Talentpool/TestMethod?test=111
会失败,因为_iTalentpoolService是个null

//需要 動態註入服務 ==> 会用到Autofac组件 ===》 Startup.cs里写
builder.RegisterAssemblyTypes(Assembly.Load("IServices"), Assembly.Load("Services"))
    .Where(t => t.Name.EndsWith("Service"))
    .AsImplementedInterfaces();


csharp 复制代码
// 在类上这样写,可以指定方法调用的格式,好像是的吧
[Route("api/[controller]/[action]")]
  • 这样的话,大概的框架就是这样了,但效果是不是会快,我就没实践过了
  • 还有,之所以目录Services和Iservices是有用处的,为了動態註入服務,后面有时间就写。
  • 其实就是想为构造函数传递值,会用到Autofac组件。
相关推荐
DevilSeagull3 分钟前
MySQL(2) 客户端工具和建库
开发语言·数据库·后端·mysql·服务
MATLAB代码顾问28 分钟前
改进遗传算法(IGA)求解作业车间调度问题(JSSP)——附MATLAB代码
开发语言·matlab
chao18984434 分钟前
完整MES系统实现 (C# 客户端服务器)
服务器·windows·c#
syker1 小时前
AIFerric深度学习框架:自研全栈AI基础设施的技术全景
开发语言·c++
HSunR1 小时前
dify 搭建ai作业批改流
开发语言·前端·javascript
月昤昽1 小时前
autocad二次开发 2.旋转
c#·autocad·autocad二次开发
代码不加糖1 小时前
2026 跨境电商独立站实战:从 0 到 1 搭建高转化 SaaS 商城(附源码)
开发语言·前端·javascript
rockey6271 小时前
基于AScript的python3脚本语言发布啦!
python·c#·.net·script·python3·eval·expression·function·动态脚本
工程师0071 小时前
C# 字符串不可变性 + 字符串驻留池原理
c#·字符串拘留池
时空系1 小时前
第9篇:成员功能——为结构体添加能力 Rust中文编程
开发语言·网络·rust