3

我希望能够在我的温莎城堡容器设置中实现这一点:

“对于在当前程序集中实现 IStartable 的所有类型,注册它们并为它们运行 Start 方法。”

类似于您可以使用 Autofac 执行诸如注册 Automapper 映射之类的操作。例如

    public class MyBlahViewModelMapper : IStartable
{
    public void Start()
    {
        Mapper.CreateMap<MyBlahEntity, MyBlahViewModel>();
    }
}

Autofac 自动完成....我想温莎在这里帮不了我?

4

2 回答 2

3

温莎有自己的IStartable界面。如果您希望 Windsor 注册您的对象并在此之后立即创建/运行它们,您将使用Startable Facility

为了澄清,这里有两个概念:

  1. IStartable接口,它提供StartStop方法。这是一个提供生命周期回调的生命周期接口:Start在组件实例创建后立即调用(在构造函数运行后)

  2. Startable Facility,它强制您的IStartable组件在安装程序运行后立即实例化并启动。

下面是代码的样子:

container.AddFacility<StartableFacility>(f => f.DeferredStart());
container.Install(FromAssembly.This());
// by here all startable are started

如果您使用的是 Windsor 3.3 或更高版本,您还可以手动触发可启动项启动(如果您需要为它们做一些额外的设置,这很有用)

var flag = new StartFlag();

container.AddFacility<StartableFacility>(f => f.DeferredStart(flag));
container.Install(FromAssembly.This());
// do whatever else set up your app needs

// when ready, signal the flag
flag.Signal();
// by here all startable are started
于 2015-08-25T05:12:42.693 回答
0

最接近的是Castle Windows Installers - 它们可以从程序集中轻松扫描并安装(或“启动”)。安装程序通常用于注册组件,但它们也可以用于其他初始化。

Windsor 使用安装程序(即实现 IWindsorInstaller 接口的类型)来封装和分区您的注册逻辑.. FromAssembly [使] 与安装程序一起工作变得轻而易举。

创建安装程序后,使用主 IoC 引导程序中的一种流畅配置,例如:

container.Install(
   FromAssembly.This());

请注意,顺序未指定;必须按顺序出现的安装程序必须使用明确的安装顺序指定,可能通过修改后的组件反射器。

于 2015-08-25T04:33:33.727 回答