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组件。
相关推荐
想躺平的咸鱼干31 分钟前
Volatile解决指令重排和单例模式
java·开发语言·单例模式·线程·并发编程
Owen_Q1 小时前
Denso Create Programming Contest 2025(AtCoder Beginner Contest 413)
开发语言·算法·职场和发展
·云扬·1 小时前
【Java源码阅读系列37】深度解读Java BufferedReader 源码
java·开发语言
liulilittle2 小时前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
Thomas_YXQ2 小时前
Unity URP法线贴图实现教程
开发语言·unity·性能优化·游戏引擎·unity3d·贴图·单一职责原则
Zz_waiting.2 小时前
Javaweb - 10.4 ServletConfig 和 ServletContext
java·开发语言·前端·servlet·servletconfig·servletcontext·域对象
Touper.3 小时前
JavaSE -- 泛型详细介绍
java·开发语言·算法
sun0077003 小时前
std::forward作用
开发语言·c++·算法
一名用户3 小时前
unity实现梦日记式传送组件
后端·c#·unity3d
Zhen (Evan) Wang3 小时前
(豆包)xgb.XGBRegressor 如何进行参数调优
开发语言·python