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组件。
相关推荐
云水-禅心8 分钟前
解决MacOS 安装Python之后默认版本指向不正确问题
开发语言·python·macos
冰暮流星9 分钟前
javascript之this关键字
开发语言·前端·javascript
rit843249910 分钟前
基于Qt的串口上位机控制蓝牙小车程序
开发语言·qt
百度Geek说10 分钟前
CodingAgent 的原始森林困境:一张地图能解决什么?
开发语言·javascript·ecmascript·coding agent
sunny.day18 分钟前
js原型与原型链
开发语言·javascript·原型模式·js原型链
weixin_5231853221 分钟前
Java内存模型详解:栈、堆、方法区、本地方法栈与程序计数器
java·开发语言
换个昵称都难34 分钟前
WebRTC QoS 实战:从原理到弱网优化
开发语言·php·webrtc
小满Autumn42 分钟前
固高GTS运动控制卡 — C#开发完全指南
c#·.net·上位机·运动控制卡
爱吃生蚝的于勒42 分钟前
QT开发第三章——常用控件
linux·服务器·开发语言·前端·javascript·c++·qt
未若君雅裁1 小时前
工厂模式详解:简单工厂、工厂方法与抽象工厂
java·开发语言