标签:http std www mon net figure asi where 加载
VS2019
关于以下几个概念,自行百度。
控制反转:IOC(Inversion of Control)
依赖注入:
容器:DI 容器(.NET Core 自带),Autofac(本文要说明使用的)
VS2019 打开 NuGet 管理器:工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 程序包
如图,我安装了这两个
using 命名空间 Autofac.Extensions.DependencyInjection
public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceProviderFactory(new AutofacServiceProviderFactory())//添加Autofac服务 .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
using 命名空间 Autofac
修改 ConfigureContainer 方法(如果没有,则添加。添加以后,程序会自动调用此方法,无需手工。)
public void ConfigureContainer(ContainerBuilder builder) { builder.RegisterType<UserService>().As<IUserService>(); }
控制器代码,其中 rtnCommon 只是一个通用 Json 返回格式,无需关注。请关注注释的几句代码。
public class AccountController : Controller { private IUserService _userService; //定义 public AccountController(IUserService userService) { _userService = userService; //完成注入 } public async Task<IActionResult> Login(modUser user) { rtnCommon rtn = new rtnCommon(); rtn = await _userService.Login(user); //调用 return Json(rtn); } }
对应的 Interface 和 class,定义接口和实现接口。
//接口 public interface IUserService { Task<rtnCommon> Login(modUser user); } //实现 public class UserService : IUserService { public async Task<rtnCommon> Login(modUser user) { rtnCommon rtn = new rtnCommon(); rtn = new rtnCommon(enmReturnCode.Success); return rtn; } }
前面第1和第3步不变,修改第2步。需要 using 命名空间 System.Reflection (C# 反射相关请自行百度。)
修改 Straup.cs 文件中的 ConfigureContainer 方法(如果没有,则添加。添加以后,程序会自动调用此方法,无需手工。)
约定接口(Interface)和实现(class)都是以 Service 结尾的。
public void ConfigureContainer(ContainerBuilder builder) { //加载程序集 var urpIService = Assembly.Load("urp.IService"); var urpService = Assembly.Load("urp.Service"); //根据名称约定(服务层的接口和实现均以Service结尾),实现服务接口和服务实现的依赖 builder.RegisterAssemblyTypes(urpIService, urpService) .Where(t => t.Name.EndsWith("Service")) .AsImplementedInterfaces().PropertiesAutowired(); }
三、生命周期
四、Autofac 配置文件
https://www.cnblogs.com/Cjb8973/p/13858902.html (Cjb8973 的 一个非常简单的入门级ASP.NET Core Autofac使用)
https://www.cnblogs.com/baocaige/p/11987902.html (Liu_Cabbage 的 FineAdmin.Mvc 使用ok-admin+ASP.NET MVC搭建的通用权限后台管理系统)【参考了是他的开源项目,不过项目是MVC5的】
标签:http std www mon net figure asi where 加载
原文地址:https://www.cnblogs.com/clis/p/14294042.html