(精华)2020年7月21日 ASP.NET Core 容器伪属性注入
发布日期:2021-06-29 15:08:10 浏览次数:3 分类:技术文章

本文共 1916 字,大约阅读时间需要 6 分钟。

为 Controller 实现伪属性注入

Controller 默认是不会通过自带容器来 Resolve&Activate 的,是通过MVC自身管理的。可以通过调用 AddControllersAsServices()方法来让 Controller 使用自带容器。

services.AddControllers().AddControllersAsServices();

AddControllersAsServices源码如下

在这里插入图片描述
定义 Controller 基类
在这里插入图片描述
Controller 继承基类
在这里插入图片描述
改造 Controller 激活器
在这里插入图片描述
替换默认 Controller 激活器

services.AddControllers().AddControllersAsServices();services.Replace(ServiceDescriptor.Transient
()); //替换默认 Controller 激活器

在这里插入图片描述

为 Application Service 实现伪属性注入

只是以 Application Service 来作为讲解,同理可举一反三到其他地方。Application Service 属于领域驱动分层架构中的一层,如不了解,可自行查找资料。

定义应用服务基类接口

public interface IAppService{
ILogger Logger {
get; set; }}public class AppService:IAppService{
public ILogger Logger {
get; set; }}

定义具体服务,以 User 服务为例

public interface IUserAppService:IAppService{
void Create();}public class UserAppService : AppService,IUserAppService{
public void Create() {
Logger.LogInformation("来自 Application Service 的日志"); }}

定义特殊的注册服务的方法,以便实现 Resolve 为 Logger 赋值

public static class ServiceExtensions{
public static IServiceCollection AddApplicationService
(this IServiceCollection services) where TService:IAppService where TImpl:AppService {
services.AddApplicationService(typeof(TService), typeof(TImpl)); return services; } // 可以反射程序集调用此方法实现批量自动注册应用服务 public static IServiceCollection AddApplicationService(this IServiceCollection services, Type serviceType,Type implType) {
services.AddTransient(serviceType, sp => {
//获取服务实现的实例 var implInstance = ActivatorUtilities.CreateInstance(sp, implType); ; if (implInstance is AppService obj) {
//为 Logger 赋值 obj.Logger= sp.GetRequiredService
().CreateLogger(implType); } return implInstance; }); return services; }

注册测试服务

在这里插入图片描述
在这里插入图片描述

转载地址:https://codeboy.blog.csdn.net/article/details/107491709 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(精华)2020年7月21日 ASP.NET Core 使用NewtonsoftJson替换掉默认的json序列化组件
下一篇:(精华)2020年7月21日 ASP.NET Core 全局过滤器的使用

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月18日 01时25分54秒