Windsor Castle 相当于 Autofac 的 IStartable
Windsor Castle Equivalent of Autofac's IStartable
我希望能够在我的温莎城堡容器设置中实现它:
"For all types that implement IStartable in the current assembly register them and run the Start method for them."
类似于您可以使用 Autofac 执行的操作,例如注册 Automapper 映射。例如
public class MyBlahViewModelMapper : IStartable
{
public void Start()
{
Mapper.CreateMap<MyBlahEntity, MyBlahViewModel>();
}
}
Autofac 会自动执行...。我在想 Windsor 不能帮我吗?
最接近的是 Castle Windows Installers - 它们可以简单地从程序集中扫描并安装(或 'started')。安装程序通常用于注册组件,但也可用于其他初始化。
Windsor uses installers (that is types implementing IWindsorInstaller interface) to encapsulate and partition your registration logic .. FromAssembly [makes] working with installers a breeze.
创建安装程序后,使用主 IoC 中的流畅配置之一 bootstrap,例如:
container.Install(
FromAssembly.This());
注意顺序未指定;必须按顺序出现的安装程序必须使用明确的安装顺序指定,可能通过修改后的程序集反射器。
温莎拥有自己的 IStartable
界面。如果您希望 Windsor 注册您的对象并在之后立即 create/run 它们,您将为此使用 Startable Facility。
澄清一下,这里有两个概念:
IStartable
接口,提供Start
和Stop
方法。这是一个提供生命周期回调的生命周期接口:Start
在创建组件实例后立即调用(在构造函数运行后)
可启动工具,强制您的 IStartable
组件在安装程序具有 运行.
后立即实例化和启动
代码如下所示:
container.AddFacility<StartableFacility>(f => f.DeferredStart());
container.Install(FromAssembly.This());
// by here all startable are started
如果您使用的是 Windsor 3.3 或更高版本,您还可以手动触发 startables 启动(如果您需要为它们做一些额外的设置,这很有用)
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
我希望能够在我的温莎城堡容器设置中实现它:
"For all types that implement IStartable in the current assembly register them and run the Start method for them."
类似于您可以使用 Autofac 执行的操作,例如注册 Automapper 映射。例如
public class MyBlahViewModelMapper : IStartable
{
public void Start()
{
Mapper.CreateMap<MyBlahEntity, MyBlahViewModel>();
}
}
Autofac 会自动执行...。我在想 Windsor 不能帮我吗?
最接近的是 Castle Windows Installers - 它们可以简单地从程序集中扫描并安装(或 'started')。安装程序通常用于注册组件,但也可用于其他初始化。
Windsor uses installers (that is types implementing IWindsorInstaller interface) to encapsulate and partition your registration logic .. FromAssembly [makes] working with installers a breeze.
创建安装程序后,使用主 IoC 中的流畅配置之一 bootstrap,例如:
container.Install(
FromAssembly.This());
注意顺序未指定;必须按顺序出现的安装程序必须使用明确的安装顺序指定,可能通过修改后的程序集反射器。
温莎拥有自己的 IStartable
界面。如果您希望 Windsor 注册您的对象并在之后立即 create/run 它们,您将为此使用 Startable Facility。
澄清一下,这里有两个概念:
IStartable
接口,提供Start
和Stop
方法。这是一个提供生命周期回调的生命周期接口:Start
在创建组件实例后立即调用(在构造函数运行后)可启动工具,强制您的
IStartable
组件在安装程序具有 运行. 后立即实例化和启动
代码如下所示:
container.AddFacility<StartableFacility>(f => f.DeferredStart());
container.Install(FromAssembly.This());
// by here all startable are started
如果您使用的是 Windsor 3.3 或更高版本,您还可以手动触发 startables 启动(如果您需要为它们做一些额外的设置,这很有用)
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