【问题标题】:.NET Core Dependency Injection - Force Immediate Activation.NET Core 依赖注入 - 强制立即激活
【发布时间】:2017-07-03 13:44:22
【问题描述】:

据我了解,在调用其中一个构造函数(如我的 MVC 项目中的控制器)之前,注入的类不会被激活。但是,是否可以立即强制激活单例,这样我就不必等待控制器被调用?我想我可以做到:

services.AddSingleton(new MySingleton());

但是如果 MySingleton 在其构造函数中使用 DI 会怎样?有没有办法调用构造函数?我是否应该更改构造函数以将 IServiceProvider 作为参数并手动提取依赖项?:

_myDependency = serviceProvider.GetService<MyDependency>();

【问题讨论】:

    标签: c# .net dependency-injection asp.net-core-mvc


    【解决方案1】:

    假设我们有一个这样实现的类。

    public class MySingleton {
        private readonly IMyDependency dependency;
        MySingleton(IMyDependency dependency) {
            this.dependency = dependency;
        }
    }
    

    如果我正确理解你的问题,你正在寻找这样的东西。

    services.AddSingleton<IMyDependency, MyDependency>();
    services.AddSingleton<MySingleton>(provider => new MySingleton(provider.GetService<IMyDependency>()));
    

    这将创建一个实现工厂,用于在需要时初始化您的单例。手动初始化类型时提供服务提供者的重载。

    例如,如果您需要在注册后立即访问您的单例。

    var serviceProvider = services.BuildServiceProvider();
    
    MySingleton singleton = serviceProvider.GetService<MySingleton>();
    

    【讨论】:

      猜你喜欢
      • 2016-05-22
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2020-12-20
      • 2018-03-03
      • 2021-07-15
      相关资源
      最近更新 更多