1
1
using System ;
2
2
using System . Threading . Tasks ;
3
+ using MoreCollection . Extensions ;
3
4
using Neutronium . Core . Binding . GlueObject ;
4
5
using Neutronium . Core . Binding . Listeners ;
5
6
using Neutronium . Core . Infra ;
6
- using Neutronium . Core . JavascriptFramework ;
7
7
using Neutronium . Core . WebBrowserEngine . JavascriptObject ;
8
8
using Neutronium . Core . Binding . Builder ;
9
- using MoreCollection . Extensions ;
10
9
using Neutronium . Core . Binding . GlueBuilder ;
11
10
using Neutronium . Core . Binding . JavascriptFrameworkMapper ;
12
11
using Neutronium . Core . Binding . Mapper ;
@@ -18,73 +17,64 @@ namespace Neutronium.Core.Binding
18
17
{
19
18
public class BidirectionalMapper : IDisposable , IBindingLifeCycle
20
19
{
21
- private readonly IWebSessionLogger _Logger ;
22
-
23
20
private readonly ICSharpToGlueMapper _CSharpToGlueMapper ;
24
21
private readonly IJavascriptToGlueMapper _JavascriptToGlueMapper ;
25
22
26
- private readonly IJavascriptObjectBuilderStrategyFactory _BuilderStrategyFactory ;
23
+ private IJavascriptFrameworkMapper _JavascriptFrameworkManager ;
27
24
28
25
private readonly ICSharpChangesListener _CSharpChangesListener ;
29
26
private readonly IJavascriptChangesListener _JavascriptChangesListener ;
30
27
31
- private readonly SessionCacher _SessionCache ;
32
- private readonly IJsUpdateHelper _JsUpdateHelper ;
33
-
28
+ private readonly IInternalSessionCache _SessionCache ;
34
29
private readonly ICSharpUnrootedObjectManager _CSharpUnrootedObjectManager ;
35
30
31
+ private readonly IJavascriptObjectBuilderStrategyFactory _BuilderStrategyFactory ;
36
32
private IJavascriptObjectBuilderStrategy _BuilderStrategy ;
37
- private IJavascriptSessionInjector _SessionInjector ;
38
- private IJavascriptFrameworkMapper _JavascriptFrameworkManager ;
39
33
40
34
public IJsCsGlue JsValueRoot { get ; }
41
35
public bool ListenToCSharp => ( Mode != JavascriptBindingMode . OneTime ) ;
42
36
public JavascriptBindingMode Mode { get ; }
43
37
public HtmlViewContext Context { get ; }
44
- private readonly object _RootObject ;
45
38
46
39
internal BidirectionalMapper ( object root , HtmlViewEngine engine , JavascriptBindingMode mode , IWebSessionLogger logger , IJavascriptObjectBuilderStrategyFactory strategyFactory ) :
47
- this ( root , engine , null , strategyFactory , mode , logger , null )
40
+ this ( root , engine , null , strategyFactory , mode , null )
48
41
{
49
42
}
50
43
51
- internal BidirectionalMapper ( object root , HtmlViewEngine contextBuilder , IGlueFactory glueFactory ,
52
- IJavascriptObjectBuilderStrategyFactory strategyFactory , JavascriptBindingMode mode , IWebSessionLogger logger , SessionCacher sessionCacher )
44
+ internal BidirectionalMapper ( object root , HtmlViewEngine contextBuilder , IGlueFactory glueFactory , IJavascriptObjectBuilderStrategyFactory strategyFactory ,
45
+ JavascriptBindingMode mode , IInternalSessionCache sessionCacher )
53
46
{
54
47
_BuilderStrategyFactory = strategyFactory ?? new StandardStrategyFactory ( ) ;
55
48
Mode = mode ;
56
- _Logger = logger ;
57
49
Context = contextBuilder . GetMainContext ( ) ;
58
50
_SessionCache = sessionCacher ?? new SessionCacher ( ) ;
59
51
var jsUpdateHelper = new JsUpdateHelper ( this , Context , ( ) => _JavascriptFrameworkManager , _SessionCache ) ;
60
52
_JavascriptToGlueMapper = new JavascriptToGlueMapper ( jsUpdateHelper , _SessionCache ) ;
61
53
62
54
_CSharpChangesListener = ListenToCSharp ? new CSharpListenerJavascriptUpdater ( jsUpdateHelper ) : null ;
63
55
glueFactory = glueFactory ?? GlueFactoryFactory . GetFactory ( Context , _SessionCache , _JavascriptToGlueMapper , _CSharpChangesListener ? . On ) ;
64
- _CSharpToGlueMapper = new CSharpToGlueMapper ( _SessionCache , glueFactory , _Logger ) ;
56
+ _CSharpToGlueMapper = new CSharpToGlueMapper ( _SessionCache , glueFactory , Context . Logger ) ;
65
57
jsUpdateHelper . GlueMapper = _CSharpToGlueMapper ;
66
- _JsUpdateHelper = jsUpdateHelper ;
67
- _RootObject = root ;
68
- _CSharpUnrootedObjectManager = new CSharpUnrootedObjectManager ( _JsUpdateHelper , _CSharpToGlueMapper ) ;
58
+
59
+ _CSharpUnrootedObjectManager = new CSharpUnrootedObjectManager ( jsUpdateHelper , _CSharpToGlueMapper ) ;
69
60
glueFactory . UnrootedObjectManager = _CSharpUnrootedObjectManager ;
70
61
_JavascriptChangesListener = ( Mode == JavascriptBindingMode . TwoWay ) ?
71
- new JavascriptListenerCSharpUpdater ( _CSharpChangesListener , _JsUpdateHelper , _JavascriptToGlueMapper ) : null ;
62
+ new JavascriptListenerCSharpUpdater ( _CSharpChangesListener , jsUpdateHelper , _JavascriptToGlueMapper ) : null ;
72
63
73
- _JsUpdateHelper . CheckUiContext ( ) ;
74
- JsValueRoot = _CSharpToGlueMapper . Map ( _RootObject ) ;
64
+ jsUpdateHelper . CheckUiContext ( ) ;
65
+ JsValueRoot = _CSharpToGlueMapper . Map ( root ) ;
75
66
JsValueRoot . AddRef ( ) ;
76
67
}
77
68
78
69
internal Task UpdateJavascriptObjects ( bool debugMode )
79
70
{
80
- return RunInJavascriptContext ( ( ) => InitOnJavascriptContext ( debugMode ) ) ;
71
+ return Context . WebView . Evaluate ( ( ) => InitOnJavascriptContext ( debugMode ) ) ;
81
72
}
82
73
83
74
private async Task InitOnJavascriptContext ( bool debugMode )
84
75
{
85
76
RegisterJavascriptHelper ( ) ;
86
77
Context . InitOnJsContext ( _JavascriptChangesListener , debugMode ) ;
87
- _SessionInjector = Context . JavascriptSessionInjector ;
88
78
_BuilderStrategy = _BuilderStrategyFactory . GetStrategy ( Context . WebView , _SessionCache , Context . JavascriptFrameworkIsMappingObject ) ;
89
79
_BuilderStrategy . UpdateJavascriptValue ( JsValueRoot ) ;
90
80
@@ -95,8 +85,8 @@ private async Task InitOnJavascriptContext(bool debugMode)
95
85
96
86
private Task RegisterMain ( IJavascriptObject res )
97
87
{
98
- var registerTask = _SessionInjector . RegisterMainViewModel ( res ) ;
99
- _JsUpdateHelper . DispatchInUiContext ( JavascriptReady ) ;
88
+ var registerTask = Context . JavascriptSessionInjector . RegisterMainViewModel ( res ) ;
89
+ Context . UiDispatcher . Dispatch ( JavascriptReady ) ;
100
90
return registerTask ;
101
91
}
102
92
@@ -115,20 +105,15 @@ private void RegisterJavascriptHelper()
115
105
Context . WebView . ExecuteJavaScript ( infra ) ;
116
106
}
117
107
118
- private Task RunInJavascriptContext ( Func < Task > run )
119
- {
120
- return Context . WebView . Evaluate ( run ) ;
121
- }
122
-
123
108
public void Dispose ( )
124
109
{
125
- _JsUpdateHelper . CheckUiContext ( ) ;
110
+ Context . CheckUiContext ( ) ;
126
111
if ( ListenToCSharp )
127
112
OnAllJsGlues ( UnlistenGlue ) ;
128
113
129
114
Context . Dispose ( ) ;
130
115
_CSharpUnrootedObjectManager . Dispose ( ) ;
131
- _Logger . Debug ( "BidirectionalMapper disposed" ) ;
116
+ Context . Logger . Debug ( "BidirectionalMapper disposed" ) ;
132
117
_BuilderStrategy ? . Dispose ( ) ;
133
118
}
134
119
0 commit comments