准备工作
- 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专案
版本冲突
专案引用
具体的引用要看你需要用到那个专案,这是你自己设定的联系。
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组件。