.NETCore 内置DI扩展 Scrutor

Scrutor 不是依赖注入框架,而是.NET内置DI的扩展包。弥补了.NET内置DI的不足。其底层还是内置DI,性能比第三方DI框架Autofac更高效。但是没有Autofac强大。如果只是为了用程序集注册,而用不到autofac的强大功能,建议用scrutor。

第一步:Nuget添加Scrutor

第二步:编码

接口、服务类 Service

namespace WebApplication_scrutor
{
    public interface IMessageService
    {
        public string Text { get; set; }
    }
    public class MessageService : IMessageService
    {
        public string Text { get; set; }
        public MessageService()
        {
            Text = "Hello Message1111";
        }
    }
}

startup 类ConfigureServices 方法

public void ConfigureServices(IServiceCollection services)
        {
            //注册webapi服务
            services.AddControllers();
            //scrutor的方式
            services.Scan(selector => selector
                //加载startup 类所在的程序集
                .FromAssemblyOf<Startup>()
                //过滤程序集中需要注册的类
                .AddClasses(classes => classes.Where(t => t.Name.EndsWith("Service")))

                //暴露匹配的接口
                .AsMatchingInterface()
                //.AsImplementedInterfaces() //暴露的是每一个接口
                //.As(t => t.GetInterfaces()) //暴露所有接口
                //.AsSelf() //暴露自己,因为是单一类型,没有接口

                //设置生命周期
                .WithScopedLifetime()
                ) ;
        }

Controller

[Route("api/[controller]")]
    [ApiController]
    public class MessageController : ControllerBase
    {
        private readonly IMessageService messageService;
        public MessageController(IMessageService _messageService)
        {
            messageService = _messageService;
        }

        public IActionResult Get() => Ok(messageService.Text);

    }
posted @ 2021-01-07 20:23  FrankFyy  阅读(286)  评论(0编辑  收藏  举报