У меня есть группа классов, которые реализуют интерфейс для моих действий по запуску приложения. Вот регистрационный код:
private static void ConfigureContainer()
{
var container = new WindsorContainer();
container.Register(AllTypes.Of<IStartupTask>()
.FromAssembly(Assembly.GetExecutingAssembly()))
...
var serviceLocator = container.Resolve<IServiceLocator>();
ServiceLocator.SetLocatorProvider(() => serviceLocator);
}
Для того, чтобы получить задачи, я использую это, и оно работает как положено:
public static void Run()
{
var tasks = ServiceLocator.Current.GetAllInstances<IStartupTask>();
foreach (var task in tasks)
{
task.Execute();
}
}
Вот моя проблема: у меня есть одно задание, которое зависит от того, какое другое запускается первым. Существует задача InitializeDatabase
, которую нужно запустить перед задачей PopulateDatabse
. Есть также куча других задач, которые выполняются, и я бы не стал разделять задачу InitializeDatabase
, если есть некоторая конфигурация Castle, которая позволит мне упорядочить разрешение типов. Я не хочу указывать полный порядок разрешаемых типов, поскольку это противоречит цели автоматической регистрации, просто InitializeDatabase
является первым или PopulateDatabase
является последним.
Есть ли способ зарегистрировать, какие типы должны быть разрешены в первую очередь, без указания порядка всех типов?