interface IUserService
class LocalUserService : IUserService
class RemoteUserService : IUserService
interface IUserRepository
class UserRepository : IUserRepository
如果我有以下接口和类,IUserService
类依赖于IUserRepository
。我可以通过以下方式注册这些组件:
container.AddComponent("LocalUserService", typeof(IUserService), typeof(LocalUserService));
container.AddComponent("RemoteUserService", typeof(IUserService), typeof(RemoteUserService));
container.AddComponent("UserRepository", typeof(IUserRepository), typeof(UserRepository));
...通过调用获得我想要的服务:
IUserService userService = container.Resolve<IUserService>("RemoteUserService");
但是,如果我有以下接口和类:
interface IUserService
class UserService : IUserService
interface IUserRepository
class WebUserRepository : IUserRepository
class LocalUserRepository : IUserRepository
class DBUserRepository : IUserRepository
如何注册这些组件,以便IUserService
组件可以“选择”在运行时注入哪个存储库?我的想法是允许用户通过提供3个单选按钮(或其他)来选择要查询的存储库,并要求容器每次解析一个新的IUserService
。
答案 0 :(得分:4)
如果您想决定要注入哪个组件(推送),请使用IHandlerSelector
s。
如果您想决定要使用哪个组件,请使用TypedFactoryFacility。
并作为旁注。
请勿使用AddComponent
,请使用container.Register(Component.For...)