class CheckValidityAsyncOperationPlugin implements IPlugin {

    @Override
    public void load() throws PluginException {
        try {
            IBootstrapItem<String> item = new BootstrapItem("CreateCheckValidityAsyncOperationActor");

            item
//                    .after("IOC")
//                    .before("starter")
                    .process(() -> {
                try {
                    IKey operationKey = Keys.getOrAdd(CheckValidityAsyncOperationActor.class.getCanonicalName());
                    IOC.register(operationKey, new ApplyFunctionToArgumentsStrategy(
                            (args) -> {
                                return new CheckValidityAsyncOperationActor((IObject) args[0]);
                        }
                    ));
                } catch (ResolutionException e) {
                    throw new ActionExecuteException("CheckValidityAsyncOperationActor plugin can't load: can't get CheckValidityAsyncOperationActor key", e);
                } catch (InvalidArgumentException e) {
                    throw new ActionExecuteException("CheckValidityAsyncOperationActor plugin can't load: can't create strategy", e);
                } catch (RegistrationException e) {
                    throw new ActionExecuteException("CheckValidityAsyncOperationActor plugin can't load: can't register new strategy", e);
                }
            });
            bootstrap.add(item);
        } catch (InvalidArgumentException e) {
            throw new PluginException("Can't load CheckValidityAsyncOperation plugin", e);
        }
    }

    public  CheckValidityAsyncOperationPlugin(final IBootstrap<IBootstrapItem<String>> bootstrap);

}