Я отслеживаю список поставщиков услуг в базе данных для consumerId
.Инъекционная зависимость на основе параметра в Play Framework
У меня есть SchedulerActor
, который создает TaskActor
для каждого поставщика услуг, включенного для consumerId
.
Я хочу ввести реализацию ServiceProvider
в TaskActor
s для каждого поставщика услуг в списке. Могут быть разные реализации 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
операторы, чтобы вернуть требуемую реализацию. - Могу ли я установить привязки поставщиков во время выполнения, передав строку объекту поставщика?
спасибо! это работало как шарм! –