我知道它已经解决了,但我无法找到如何真正实现任何例子InstallerFactory,所以这里有一个解决方案,如果有人正在使用它。
使用方法:
[InstallerPriority(0)]
public class ImportantInstallerToRunFirst : IWindsorInstaller
{
public void Install(IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
{
// do registrations
}
}
只是一个优先添加InstallerPriority
属性的“安装顺序敏感”类别。安装人员将按升序排序。没有优先安装程序将默认为100
如何实现:
public class WindsorBootstrap : InstallerFactory
{
public override IEnumerable<Type> Select(IEnumerable<Type> installerTypes)
{
var retval = installerTypes.OrderBy(x => this.GetPriority(x));
return retval;
}
private int GetPriority(Type type)
{
var attribute = type.GetCustomAttributes(typeof(InstallerPriorityAttribute), false).FirstOrDefault() as InstallerPriorityAttribute;
return attribute != null ? attribute.Priority : InstallerPriorityAttribute.DefaultPriority;
}
}
[AttributeUsage(AttributeTargets.Class)]
public sealed class InstallerPriorityAttribute : Attribute
{
public const int DefaultPriority = 100;
public int Priority { get; private set; }
public InstallerPriorityAttribute(int priority)
{
this.Priority = priority;
}
}
当启动应用程序时,Global.asax的等:
container.Install(FromAssembly.This(new WindsorBootstrap()));
手动添加安装在您需要的顺序?无论如何,你能告诉我们为什么你需要定义一个特定的订单吗? – 2011-06-15 13:49:26
好吧,让我们假设我想保证Service安装程序首先运行(依赖关系图允许)。该文档说覆盖InstallerFactory是要走的路。这个话题似乎很少涉及。我认为最终归结为重新排序传递给Select方法的IEnumerable –
2011-06-15 16:09:03