准备工作
- Windows 10
- Visual 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實現IOCvar containerBuilder = new ContainerBuilder();//模塊化注入containerBuilder.RegisterModule<HelpTool.AutofacModuleRegister>();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组件。