Вы должны сделать переменную таймера более широкой областью действия, чтобы к ней можно было обращаться как из progress
, так и ticker
, и вам нужно очистить интервал, если он уже запущен, чтобы вы не могли иметь несколько интервалов, работающих одновременно :
var myTimer = null; // Declared here so it can be used in both functions
const ticker = function () {
if(store.timer < 100){
store.addToTimer() //mobX store action to add 1+ to the store.timer
}
};
function progress() {
store.timer = 0
let time = Moment()
let songEnd = Moment().add(1, "minutes")
const durationToFinnish = Moment.duration(songEnd.diff(time));
const intervalToTick = 100000 / durationToFinnish.asMilliseconds()
// Check to see if there is already a timer running
if(myTimer){
clearInterval(myTimer); // Stop the interval
}
myTimer = setInterval(ticker, intervalToTick * 1000);
}
<div className={classes.progressBar} id="progress">
<div className={classes.innerProgressBar}>
<span onClick={progress}>{store.timer}%</span><br></br>
</div>
</div>
Проверьте Вас ответ на этот вопрос (особенно ссылка сообщения форума), который, кажется, то, что Вы ищете. Некоторые примеры используют Переходный жизненный цикл, но я думаю, что он будет работать с Singleton также.
Основная выплата сообщения форума:
container.Register(Component.For<IEntityIndexController, ISnippetController>()
.ImplementedBy<SnippetController>()
.LifeStyle.Transient);
Решением является использование быстрый интерфейс (и недавняя магистральная сборка), и не было возможно настроить в xml в последний раз, я видел. Однако это может быть возможно со средством.
Удачи!
Можно зарегистрировать экземпляр объекта (вместо реализации), чтобы быть ответственными за различные реализации:
var ab = new AB();
container.Register( Component.For<IA>().Instance( ab) );
container.Register( Component.For<IB>().Instance( ab) );
Я полагаю, что это должно работать. Однако это требует в конфигурации кода по очевидным причинам.
Пробовали ли вы использовать метод Forward
:
container.Register(Component.For<IEntityIndexController>()
.ImplementedBy<SnippetController>()
.Forward (typeof(ISnippetController))
.LifeStyle.Transient);
Из моих экспериментов и из документации:
зарегистрируйте типы сервисов от имени этого компонента
я думаю, это должно помочь.