ASP.NET CORE Dependency injectio

作者: 夏天的夏秋天的天 | 来源:发表于2019-04-29 21:33 被阅读8次
    Dependency injection

    IOC(控制反转)是啥? 借助第三方来实现依赖关系之间的解耦
    在原来A对象获取B对象时,由主动获取一个B对象,变为了ioc主动创建一个B对象给予A。造成了A对象由主动行为变为了被动行为,则称为控制反转。(A在获得依赖对象的过程被反转了)

    DI(依赖注入)又是啥?
    在IOC运行期间,动态的将某种依赖关系注入到对象中。

    ioc

    IOC 和 DI 都是描述的同一件事情,只是通过了不同的角度来看待这个过程。

    在ASP.NET CORE中提供了DI容器
    自带的DI容器中提供了三种方法,分别是三种不同的生命周期
    1、Transient每次调用都是不同的实例,比如常用的Microsoft.Extensions.Options.IConfigureOptions<T>;

    2、Scoped每次请求是同一个实例,如 Entity Framework contexts;

    3、Singleton只有一个实例,如Microsoft.Extensions.Logging.ILogger<T>;

    具体使用哪种,要根据具体情况而定;

    1、比如我们一般的业务逻辑都是Transient,这个也是比较常用的;

    2、Scoped相对用的比较少,当然也有很多业务逻辑也有用Scoped的;当然他的妙用肯定是每次请求一个实例,比如我们在系统中获取登录系统用户的Id,这时就可以用Scoped,不管在Service层或者Repository层等等,获取的都是同一个用户;

    3、Singleton很多都是系统级别设计用单利,比如日志;


    使用方式
    class Startup

    //在Startup类的ConfigureServices方法中设置注入
     public void ConfigureServices (IServiceCollection services) {
                services.AddTransient<IService, Service> ();
            }
    
    //使用构造函数的方式获取实例
    public class ServiceController : Controller {
            private readonly IService _service;
            public ServiceController ( IService service) {
                _service= service;
            }
    

    此外还可以用其他的容器来替换自带的DI容器 如:Autofac

    相关文章

      网友评论

        本文标题:ASP.NET CORE Dependency injectio

        本文链接:https://www.haomeiwen.com/subject/smounqtx.html