代码之家  ›  专栏  ›  技术社区  ›  DarthVader

.NET Core将类作为自身添加/注册到服务集合

  •  3
  • DarthVader  · 技术社区  · 8 年前

    我正在尝试将类self添加到容器中。

    但是,由于类在构造函数中需要一些依赖项,因此它会出现语法错误。

    services.TryAddSingleton<TimeoutPolicyHolder>(new TimeoutPolicyHolder());
    

    如何将这个类添加为self?

    在autofac中相同的是:

    builder.RegisterType<FooService>().AsSelf();
    

    我该如何解决这个问题?

    1 回复  |  直到 7 年前
        1
  •  6
  •   Nkosi    8 年前

    您可以使用泛型扩展将服务本身添加到服务集合。

    services.AddSingleton<TimeoutPolicyHolder>();
    

    或者一个可用的重载。

    容器将负责初始化服务和注入任何依赖项。

    如果要手动创建实例,可以使用工厂委托

    services.TryAddSingleton<TimeoutPolicyHolder>(sp => 
        new TimeoutPolicyHolder(sp.GetService<Dependency1>(),...)
    );
    

    当调用时,它将有权访问服务提供者,以便可以解析任何需要解析的依赖项。