为什么不抽象工厂模式?
public class UserServiceFactory : IUserServiceFactory {
public EmployeeServiceFactory(IUserService employeeService
, IUserService managerService
, IUserService executiveService) {
//null guards
this.employeeService = employeeService;
this.managerService = managerService;
this.executiveService = executiveService;
}
}
从这里,你有两个选择,要么使用传统的if-else语句或策略模式按对象类型来解决。
如果其他例子(内UserServiceFactory法):
public void DoSomething(User user) {
if (user is Employee) {
employeeService.DoSomething(user);
}
else if (user is Manager) {
managerService.DoSomething(user);
}
else if (user is Executive) {
executiveService.DoSomething(user);
}
}
解决按对象类型:
public void DoSomething(Employee user) {
employeeService.DoSomething(user);
}
public void DoSomething(Manager user) {
managerService.DoSomething(user);
}
public void DoSomething(Executive user) {
executiveService.DoSomething(user);
}
应该有另一种方式来做到这一点,通过使用命名了配置,但我仍然无法做到这一点。
中直接调用用法:
public void CallUser() {
// declare the services and user here
UserServiceFactory userServiceFactory = new UserServiceFactory(employeeService
, managerService
, executiveService);
userServiceFactory.DoSomething(user);
}
其他服务用法,注射工厂,而不是服务集合。
public class UserServiceConsumer:IUserServiceConsumer {
public UserServiceConsumer(IUserServiceFactory userServiceFactory) {
this.userServiceFactory = userServiceFactory;
}
IUserServiceFactory userServiceFactory;
public void ConsumeFactory(User user) {
//do some validation maybe
userServiceFactory.DoSomething(user);
}
}
听起来很复杂,但在你理解后很简单。
我认为这是正确的轨道。对于ServiceResolver.Current.Resolve>()有没有办法解决而不通过T?我没有定义T泛型,只是对象类型。 –
NullReference
2013-04-23 19:44:43
Gahh ...不是我想听的.... – Aron 2013-04-24 01:15:23