【发布时间】:2016-10-20 00:43:58
【问题描述】:
我在数据库中跟踪consumerId 的服务提供商列表。
我有一个SchedulerActor,它为启用consumerId 的每个服务提供商创建TaskActor。
我想为列表中的每个服务提供者注入一个ServiceProvider 到TaskActors 的实现。 ServiceProvider 可以有不同的实现。
interface ServiceProvider {
void processRequest(Request request);
}
class SchedulerActor {
@Override
public void onReceive(Object consumerId) throws Exception {
List<String> serviceProvidersList = getFromDatabase((String) consumerId);
for (String serviceProviderStr : serviceProvidersList) {
//serviceProviderStr could be "ServiceProvider1" or "ServiceProvider2"
ServiceProvider serviceProvider = getServiceProviderFromStr(serviceProviderStr);
ActorRef r = getContext().actorOf(Props.create(TaskActor.class, serviceProvider));
getContext().watch(r);
routees.add(new ActorRefRoutee(r));
}
router = new Router(new BroadcastRoutingLogic(), routees);
router.route(message, getSelf());
}
}
class TaskActor {
private final ServiceProvider serviceProvider;
public TaskActor(ServiceProvider serviceProvider) {
this.serviceProvider = serviceProvider;
}
@Override
public void onReceive(Object message) {
if (message instanceof Request) {
serviceProvider.processRequest((Request)message);
}
}
}
-
getServiceProviderFromStr(String)内部有什么实现这一目标的? - 我不想添加
switch或if else语句来返回所需的实现。 - 我能否在运行时提供提供程序绑定,将字符串传递给提供程序对象?
【问题讨论】:
标签: java playframework dependency-injection akka guice