.net 依赖注入扫描框架Scrutor

services.Scan(scan => scan
    // 扫描特定类型所在的程序集,这里是 ITransientService 所在的程序集
    .FromAssemblyOf<ITransientService>()
        // .AddClasses 在上面获取到的程序集中扫描所有公开、非抽象类型
        // 之后可以通过委托进行类型筛选,例如下面只扫描实现 ITransientService 的类型
        .AddClasses(classes => classes.AssignableTo<ITransientService>())
            // 将上面的类型作为它实现的所有接口进行注册
            // 如果类型实现了 N 个接口,那么就会有三个独立的注册
            .AsImplementedInterfaces()
            // 最后指定注册的生存期,如瞬时,作用域,还是单例
            .WithTransientLifetime()
        // 重复上面操作,比如这里扫描 IScopedService 所在的程序集
        .AddClasses(classes => classes.AssignableTo<IScopedService>())
            // 这里和上面不一样的是,这里指定只实现特定的几口,也就是只注册一次
            .As<IScopedService>()
            // 指定注册的生存期
            .WithScopedLifetime()
        // 也支持泛型注册,单个泛型参数
        .AddClasses(classes => classes.AssignableTo(typeof(IOpenGeneric<>)))
            .AsImplementedInterfaces()
        // 多个泛型参数
        .AddClasses(classes => classes.AssignableTo(typeof(IQueryHandler<,>)))
            .AsImplementedInterfaces());

github: https://github.com/khellang/Scrutor

posted @ 2025-03-24 11:00  .Neterr  阅读(37)  评论(0)    收藏  举报