Castle Winsdor を DI 解決ツールとして使用しています。
私はエンティティコードをマップします:
container.RegisterServices(
Assembly.GetAssembly(typeof(GridEntityService<,>)));
私は2つのジェネリックとのインターフェースを持っています:
IGridEntityService<TEntity,TService>
そして、私はこのインターフェースの 2 つの実装を持っています。初め:
GridEntityService<TEntity,TService>: IGridEntityService<TEntity,TService>
また、カスタム実装もあります。2番:
TaskServiceOne : GridEntityService<User, LoginService> { }
TaskServiceTwo : GridEntityService<Report, LoginService> { }
私のコントローラーコンストラクターでは:
public UserController(
IGridEntityService<User, LoginService> userService,
IGridEntityService<Report, LoginService> reportService)
{
// Get Correct one TaskServiceOne
GridEntityService = userService;
// Get GridEntityService<Report, LoginService>
// not the TaskServiceTwo
GridSecondEntityService = reportService
}
ウィンザー城に正しいものを入手するように言うにはどうすればよいですか? なぜ彼らは間違ったのですか?私は同様のサービスを提供している他の場所を持っており、それらは正常に機能しています。
編集しました。コメントするアンサー。あなたが正しいです。それは拡張方法です:
public static void RegisterServices(this IWindsorContainer container, Assembly assembly)
{
container.Register(
AllTypes.FromAssembly(assembly).Where(t => true).WithService.AllInterfaces().Configure(
reg => reg.LifeStyle.Custom<InstantiateAndForgetIt>()));
}