私は、アプリケーション起動のためのインターフェースを実装するクラスのグループを持っています。ここで登録コードは次のとおりです。Castle Windsor AllTypesのタイプの整理された解決方法
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();
}
}
は私の問題です:私は別であることに依存して一つのタスクを持っています最初に実行します。 PopulateDatabse
タスクの前に実行する必要があるInitializeDatabase
タスクがあります。実行されている他のタスクもたくさんあります。タイプの解像度を注文するためのCastle設定がある場合は、InitializeDatabase
タスクを分割しないでください。私はタイプの完全な順序を指定したくないので、自動登録の目的を破るので、InitializeDatabase
が最初であるか、PopulateDatabase
が最後です。
すべてのタイプの順序を指定せずにどのタイプを最初に解決する必要があるかを登録する方法はありますか?
なぜ共通サービスロケータを使用していますか? –
私はいくつかのツールを試していましたが、まだ取り上げていません。私は自分のコードからスニペットをコピーし、質問の中で城の構文を誤解したくはありませんでした。 お返事ありがとうございます、私は試してみましょう。 –