加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

.Net Core 最简洁的约定式依赖注入

发布时间:2020-12-14 04:49:39 所属栏目:百科 来源:网络整理
导读:.Net Core 最简洁的约定式依赖注入 ?github:https://github.com/280780363/guc/tree/master/src/Guc.Kernel/Dependency 如果大家用过abp框架,应该记得那个很恶心人的DependsOn,对的,需要手动在代码里面去配置依赖关系.然后链式解析依赖关系并注册服务. ? 以

.Net Core 最简洁的约定式依赖注入


?github:https://github.com/280780363/guc/tree/master/src/Guc.Kernel/Dependency

如果大家用过abp框架,应该记得那个很恶心人的DependsOn,对的,需要手动在代码里面去配置依赖关系.然后链式解析依赖关系并注册服务.

?

以下基于官方依赖注入框架(顺带提一句,号称最快的autofac,效率都比官方库差得远),实现一句话完成所有的服务注册,不需要你管理依赖关系,不需要你手动注册程序集,不需要你service.Add(...),guc默认使用默认DependencyContext(依赖上下文)解析应用中的程序集.

?

// 是的,就一句话,完成整个应用所有项目的服务注册
services.AddGucKernel();

?

Guc提供以下三种约定注入接口:

ITransient:临时注入,

ISingleton:全局单例注入,

IScoped:作用域内单例注入

?

只需要继承相应的接口,即可自动注册,例:

public class UserModel
    {
        public int Id { get; set; }

        public string Name { get; set; }
    }

    public interface IUsers : Guc.Kernel.Dependency.ITransient
    {
        List<UserModel> GetAll();
    }

    public class Users : IUsers
    {
        List<UserModel> IUsers.GetAll()
        {
            return new List<UserModel>
            {
                new UserModel
                {
                    Id=1,Name="laowang1"
                },new UserModel
                {
                    Id=2,Name="laowang2"
                }
            };
        }
    }

?

原理:

1.使用DependencyContext.Default默认依赖上下文,递归解析包含引用Guc.Kernel的程序集(即可能使用约定注册的程序集);

2.查找程序集实现了约定接口的类型(ITransient/ISingleton/IScoped);

3.注册类型.

核心代码:https://github.com/280780363/guc/blob/master/src/Guc.Kernel/Dependency/ConventionServiceDescriptorProvider.cs

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读