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组件。
相关推荐
CP-DD23 分钟前
C/C++ 通用代码模板
c语言·开发语言·c++
李少兄28 分钟前
【Java基础】Java集合遍历方式
java·开发语言·windows
King.62432 分钟前
SQL2API 核心理念:如何重构数据服务交付范式
大数据·开发语言·数据库·人工智能·sql·lua
观无34 分钟前
关于Newtonsoft.Json
c#
薯条不要番茄酱40 分钟前
【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(二)
java·开发语言·java-ee
User_芊芊君子1 小时前
Java与C在典型场景下的性能对比深度剖析
java·c语言·开发语言
唐青枫1 小时前
C# 如何比较两个List是否相等?
c#·.net
珹洺2 小时前
JSP技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统
java·开发语言·前端·html·intellij-idea·jsp
·醉挽清风·3 小时前
学习笔记—C++—模板初阶
开发语言·c++·笔记·学习
User_芊芊君子3 小时前
跨平台开发选Java还是C?应用场景与性能深度对比
java·c语言·开发语言