Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 我可以急切地使用castle windsor实例化注册为单例的实例吗?_Dependency Injection_Castle Windsor - Fatal编程技术网

Dependency injection 我可以急切地使用castle windsor实例化注册为单例的实例吗?

Dependency injection 我可以急切地使用castle windsor实例化注册为单例的实例吗?,dependency-injection,castle-windsor,Dependency Injection,Castle Windsor,在castle windsor中,当使用单例生命周期注册实例时,有没有一种方法可以急切地实例化它们(而不是在第一次注入它们时让它们初始化) 更新: 我想更多的细节在这里会有所帮助: 这些实例包含一些有利于在启动时运行的初始化代码,这就是为什么我对这样做感兴趣 我正在使用AllTypes.Pick()注册其中相当多的实例,因此我更喜欢一种解决方案,它不需要我在构建容器后手动从容器中分别解析每个实例 是的,您可以使用Startable设备(Windsor自带): container.AddFacil

在castle windsor中,当使用单例生命周期注册实例时,有没有一种方法可以急切地实例化它们(而不是在第一次注入它们时让它们初始化)

更新:

我想更多的细节在这里会有所帮助:

  • 这些实例包含一些有利于在启动时运行的初始化代码,这就是为什么我对这样做感兴趣
  • 我正在使用
    AllTypes.Pick()
    注册其中相当多的实例,因此我更喜欢一种解决方案,它不需要我在构建容器后手动从容器中分别解析每个实例

  • 是的,您可以使用Startable设备(Windsor自带):

    container.AddFacility(
    //在v2.5中可选
    f=>f.DeferredStart()
    );
    集装箱。登记(
    AllTypes.FromThisAssembly()
    .Pick().WhateverYouWant()
    .Configure(c=>c.Start());
    
    DeferredStart
    方法在v2.5中是新的,它的作用以及建议使用它的原因。示例在v2.5中使用了一些新的API,但是如果您使用v2.1,它应该让您了解如何实现这一点


    在以前的版本中,方法
    Start()
    被称为
    Startable()

    谢谢!这正是我想要的。还有一个问题……我的“Start”逻辑在组件的构造函数中被调用;那么如何使用此方法使其工作?使用
    Start
    method,它将-仅实例化对象。如果组件上有具有可启动逻辑的方法,请使用
    StartUsingMethod(c=>c.YourStartMethod)
    换句话说,我展示的示例正是您想要的。好吧……我明白了;这相当于以前版本中的c=>c.Startable()。难怪他们改变了这一点,这有点让人困惑:)
    container.AddFacility<StartableFacility>(
    // optionally in v2.5
    f=> f.DeferredStart()
    );
    container.Register(
       AllTypes.FromThisAssembly()
          .Pick().WhateverYouWant()
          .Configure(c => c.Start());