public void Dispose() { _JsUpdateHelper.CheckUiContext(); if (ListenToCSharp) { OnAllJsGlues(UnlistenGlue); } Context.Dispose(); _UnrootedEntities.Clear(); _Logger.Debug("BidirectionalMapper disposed"); _BuilderStrategy?.Dispose(); }
public void RegisterInSession(object newCSharpObject, Action <IJsCsGlue> performAfterBuild) { _JsUpdateHelper.CheckUiContext(); var value = _CSharpToGlueMapper.Map(newCSharpObject); if (value == null) { return; } var updater = GetUnrootedEntitiesUpdater(value, performAfterBuild); _JsUpdateHelper.DispatchInJavascriptContext(() => { _JsUpdateHelper.UpdateOnJavascriptContext(updater, value); }); }
internal BidirectionalMapper(object root, HtmlViewEngine contextBuilder, IGlueFactory glueFactory, IJavascriptObjectBuilderStrategyFactory strategyFactory, JavascriptBindingMode mode, IWebSessionLogger logger) { _BuilderStrategyFactory = strategyFactory ?? new StandardStrategyFactory(); Mode = mode; _Logger = logger; var javascriptObjectChanges = (mode == JavascriptBindingMode.TwoWay) ? (IJavascriptChangesObserver)this : null; Context = contextBuilder.GetMainContext(javascriptObjectChanges); _SessionCache = new SessionCacher(); var jsUpdateHelper = new JsUpdateHelper(this, Context, () => _BuilderStrategy, _SessionCache); _ListenerUpdater = ListenToCSharp ? new ListenerUpdater(jsUpdateHelper) : null; glueFactory = glueFactory ?? GlueFactoryFactory.GetFactory(Context, _SessionCache, this, _ListenerUpdater?.On); _JsObjectBuilder = new CSharpToJavascriptConverter(_SessionCache, glueFactory, _Logger); jsUpdateHelper.JsObjectBuilder = _JsObjectBuilder; _JsUpdateHelper = jsUpdateHelper; _RootObject = root; _JsUpdateHelper.CheckUiContext(); JsValueRoot = _JsObjectBuilder.Map(_RootObject); JsValueRoot.AddRef(); }