准备工作

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

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

在系统里直接建Controller类

新增专案

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

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

新增IServices专案

新增Services专案

新增Model专案

版本冲突

专案引用

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

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();

containerBuilder.Populate(services);

var container = containerBuilder.Build();

return new AutofacServiceProvider(container);

}

}

}

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();

// 在类上这样写,可以指定方法调用的格式,好像是的吧

[Route("api/[controller]/[action]")]

这样的话,大概的框架就是这样了,但效果是不是会快,我就没实践过了还有,之所以目录Services和Iservices是有用处的,为了動態註入服務,后面有时间就写。其实就是想为构造函数传递值,会用到Autofac组件。

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: