class IObjectSimpleImplPlugin implements IPlugin {

    @Override
    public void load() throws PluginException {
        try {
            IBootstrapItem<String> item = new BootstrapItem("IObjectSimpleImplPlugin");
            item
                .after("IOC")
                .process(() -> {
                    try {
                        IKey fieldKey = Keys.getOrAdd(IObjectImpl.class.getCanonicalName());
                        IOC.register(fieldKey, new CreateNewInstanceStrategy(
                                (args) -> new IObjectImpl()
                        ));
                    } catch (ResolutionException e) {
                        throw new ActionExecuteException("IObjectSimpleImpl plugin can't load: can't get IObjectSimpleImpl key", e);
                    } catch (InvalidArgumentException e) {
                        throw new ActionExecuteException("IObjectSimpleImpl plugin can't load: can't create strategy", e);
                    } catch (RegistrationException e) {
                        throw new ActionExecuteException("IObjectSimpleImpl plugin can't load: can't register new strategy", e);
                    }
                });
            bootstrap.add(item);
        } catch (InvalidArgumentException e) {
            throw new PluginException("Can't load IObject plugin", e);
        }
    }

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

}