@@ -27,39 +27,167 @@ public class BiDi : IAsyncDisposable
2727{ 
2828    private  readonly  Broker  _broker ; 
2929
30-     private  readonly  Session . SessionModule  _sessionModule ; 
31-     private  readonly  BrowsingContext . BrowsingContextModule  _browsingContextModule ; 
32-     private  readonly  Browser . BrowserModule  _browserModule ; 
33-     private  readonly  Network . NetworkModule  _networkModule ; 
34-     private  readonly  Input . InputModule  _inputModule ; 
35-     private  readonly  Script . ScriptModule  _scriptModule ; 
36-     private  readonly  Log . LogModule  _logModule ; 
37-     private  readonly  Storage . StorageModule  _storageModule ; 
30+     private  Session . SessionModule ?  _sessionModule ; 
31+     private  BrowsingContext . BrowsingContextModule ?  _browsingContextModule ; 
32+     private  Browser . BrowserModule ?  _browserModule ; 
33+     private  Network . NetworkModule ?  _networkModule ; 
34+     private  Input . InputModule ?  _inputModule ; 
35+     private  Script . ScriptModule ?  _scriptModule ; 
36+     private  Log . LogModule ?  _logModule ; 
37+     private  Storage . StorageModule ?  _storageModule ; 
38+ 
39+     private  readonly  object  _moduleLock  =  new ( ) ; 
3840
3941    internal  BiDi ( string  url ) 
4042    { 
4143        var  uri  =  new  Uri ( url ) ; 
4244
4345        _broker  =  new  Broker ( this ,  uri ) ; 
46+     } 
47+ 
48+     internal  Session . SessionModule  SessionModule 
49+     { 
50+         get 
51+         { 
52+             if  ( _sessionModule  is  null ) 
53+             { 
54+                 lock  ( _moduleLock ) 
55+                 { 
56+                     if  ( _sessionModule  is  null ) 
57+                     { 
58+                         _sessionModule  =  new  Session . SessionModule ( _broker ) ; 
59+                     } 
60+                 } 
61+             } 
62+             return  _sessionModule ; 
63+         } 
64+     } 
65+ 
66+     public  BrowsingContext . BrowsingContextModule  BrowsingContext 
67+     { 
68+         get 
69+         { 
70+             if  ( _browsingContextModule  is  null ) 
71+             { 
72+                 lock  ( _moduleLock ) 
73+                 { 
74+                     if  ( _browsingContextModule  is  null ) 
75+                     { 
76+                         _browsingContextModule  =  new  BrowsingContext . BrowsingContextModule ( _broker ) ; 
77+                     } 
78+                 } 
79+             } 
80+             return  _browsingContextModule ; 
81+         } 
82+     } 
83+ 
84+     public  Browser . BrowserModule  Browser 
85+     { 
86+         get 
87+         { 
88+             if  ( _browserModule  is  null ) 
89+             { 
90+                 lock  ( _moduleLock ) 
91+                 { 
92+                     if  ( _browserModule  is  null ) 
93+                     { 
94+                         _browserModule  =  new  Browser . BrowserModule ( _broker ) ; 
95+                     } 
96+                 } 
97+             } 
98+             return  _browserModule ; 
99+         } 
100+     } 
44101
45-         _sessionModule  =  new  Session . SessionModule ( _broker ) ; 
46-         _browsingContextModule  =  new  BrowsingContext . BrowsingContextModule ( _broker ) ; 
47-         _browserModule  =  new  Browser . BrowserModule ( _broker ) ; 
48-         _networkModule  =  new  Network . NetworkModule ( _broker ) ; 
49-         _inputModule  =  new  Input . InputModule ( _broker ) ; 
50-         _scriptModule  =  new  Script . ScriptModule ( _broker ) ; 
51-         _logModule  =  new  Log . LogModule ( _broker ) ; 
52-         _storageModule  =  new  Storage . StorageModule ( _broker ) ; 
102+     public  Network . NetworkModule  Network 
103+     { 
104+         get 
105+         { 
106+             if  ( _networkModule  is  null ) 
107+             { 
108+                 lock  ( _moduleLock ) 
109+                 { 
110+                     if  ( _networkModule  is  null ) 
111+                     { 
112+                         _networkModule  =  new  Network . NetworkModule ( _broker ) ; 
113+                     } 
114+                 } 
115+             } 
116+             return  _networkModule ; 
117+         } 
53118    } 
54119
55-     internal  Session . SessionModule  SessionModule  =>  _sessionModule ; 
56-     public  BrowsingContext . BrowsingContextModule  BrowsingContext  =>  _browsingContextModule ; 
57-     public  Browser . BrowserModule  Browser  =>  _browserModule ; 
58-     public  Network . NetworkModule  Network  =>  _networkModule ; 
59-     internal  Input . InputModule  InputModule  =>  _inputModule ; 
60-     public  Script . ScriptModule  Script  =>  _scriptModule ; 
61-     public  Log . LogModule  Log  =>  _logModule ; 
62-     public  Storage . StorageModule  Storage  =>  _storageModule ; 
120+     internal  Input . InputModule  InputModule 
121+     { 
122+         get 
123+         { 
124+             if  ( _inputModule  is  null ) 
125+             { 
126+                 lock  ( _moduleLock ) 
127+                 { 
128+                     if  ( _inputModule  is  null ) 
129+                     { 
130+                         _inputModule  =  new  Input . InputModule ( _broker ) ; 
131+                     } 
132+                 } 
133+             } 
134+             return  _inputModule ; 
135+         } 
136+     } 
137+ 
138+     public  Script . ScriptModule  Script 
139+     { 
140+         get 
141+         { 
142+             if  ( _scriptModule  is  null ) 
143+             { 
144+                 lock  ( _moduleLock ) 
145+                 { 
146+                     if  ( _scriptModule  is  null ) 
147+                     { 
148+                         _scriptModule  =  new  Script . ScriptModule ( _broker ) ; 
149+                     } 
150+                 } 
151+             } 
152+             return  _scriptModule ; 
153+         } 
154+     } 
155+ 
156+     public  Log . LogModule  Log 
157+     { 
158+         get 
159+         { 
160+             if  ( _logModule  is  null ) 
161+             { 
162+                 lock  ( _moduleLock ) 
163+                 { 
164+                     if  ( _logModule  is  null ) 
165+                     { 
166+                         _logModule  =  new  Log . LogModule ( _broker ) ; 
167+                     } 
168+                 } 
169+             } 
170+             return  _logModule ; 
171+         } 
172+     } 
173+ 
174+     public  Storage . StorageModule  Storage 
175+     { 
176+         get 
177+         { 
178+             if  ( _storageModule  is  null ) 
179+             { 
180+                 lock  ( _moduleLock ) 
181+                 { 
182+                     if  ( _storageModule  is  null ) 
183+                     { 
184+                         _storageModule  =  new  Storage . StorageModule ( _broker ) ; 
185+                     } 
186+                 } 
187+             } 
188+             return  _storageModule ; 
189+         } 
190+     } 
63191
64192    public  Task < Session . StatusResult >  StatusAsync ( ) 
65193    { 
0 commit comments