1- using System . Net . Http ;
2- using ArangoDBNetStandard . AdminApi ;
1+ using ArangoDBNetStandard . AdminApi ;
32using ArangoDBNetStandard . AnalyzerApi ;
43using ArangoDBNetStandard . AqlFunctionApi ;
54using ArangoDBNetStandard . AuthApi ;
1716using ArangoDBNetStandard . Transport . Http ;
1817using ArangoDBNetStandard . UserApi ;
1918using ArangoDBNetStandard . ViewApi ;
19+ using System . Net . Http ;
2020
2121namespace ArangoDBNetStandard
2222{
@@ -25,6 +25,8 @@ namespace ArangoDBNetStandard
2525 /// </summary>
2626 public class ArangoDBClient : IArangoDBClient
2727 {
28+ protected readonly bool _suppressTransportDisposal ;
29+
2830 /// <summary>
2931 /// The transport client used to communicate with the ArangoDB host.
3032 /// </summary>
@@ -79,7 +81,7 @@ public class ArangoDBClient : IArangoDBClient
7981 /// Index management API
8082 /// </summary>
8183 public IIndexApiClient Index { get ; private set ; }
82-
84+
8385 /// <summary>
8486 /// Bulk Operations API.
8587 /// </summary>
@@ -89,12 +91,12 @@ public class ArangoDBClient : IArangoDBClient
8991 /// View management API.
9092 /// </summary>
9193 public IViewApiClient View { get ; private set ; }
92-
94+
9395 /// <summary>
9496 /// Analyzer management API.
9597 /// </summary>
96- public IAnalyzerApiClient Analyzer { get ; private set ; }
97-
98+ public IAnalyzerApiClient Analyzer { get ; private set ; }
99+
98100 /// <summary>
99101 /// Admin management API
100102 /// </summary>
@@ -110,9 +112,18 @@ public class ArangoDBClient : IArangoDBClient
110112 /// <see cref="HttpClient"/> instance, using the default JSON serialization.
111113 /// </summary>
112114 /// <param name="client"></param>
113- public ArangoDBClient ( HttpClient client )
115+ /// <param name="suppressClientDisposal">
116+ /// True to prevent disposal of the provided <see cref="HttpClient"/> instance
117+ /// when <see cref="ArangoDBClient"/> is disposed.
118+ /// Default is false, to avoid a breaking change.
119+ /// </param>
120+ public ArangoDBClient ( HttpClient client , bool suppressClientDisposal = false )
114121 {
115- _transport = new HttpApiTransport ( client , HttpContentType . Json ) ;
122+ _transport = new HttpApiTransport (
123+ client ,
124+ HttpContentType . Json ,
125+ suppressClientDisposal ) ;
126+ _suppressTransportDisposal = false ;
116127
117128 var serialization = new JsonNetApiClientSerialization ( ) ;
118129
@@ -124,9 +135,17 @@ public ArangoDBClient(HttpClient client)
124135 /// using the provided transport layer and the default JSON serialization.
125136 /// </summary>
126137 /// <param name="transport">The ArangoDB transport layer implementation.</param>
127- public ArangoDBClient ( IApiClientTransport transport )
138+ /// <param name="suppressTransportDisposal">
139+ /// True to prevent disposal of the provided <see cref="IApiClientTransport"/> instance
140+ /// when <see cref="ArangoDBClient"/> is disposed.
141+ /// Default is false, to avoid a breaking change.
142+ /// </param>
143+ public ArangoDBClient (
144+ IApiClientTransport transport ,
145+ bool suppressTransportDisposal = false )
128146 {
129147 _transport = transport ;
148+ _suppressTransportDisposal = suppressTransportDisposal ;
130149
131150 var serialization = new JsonNetApiClientSerialization ( ) ;
132151
@@ -139,9 +158,18 @@ public ArangoDBClient(IApiClientTransport transport)
139158 /// </summary>
140159 /// <param name="transport">The ArangoDB transport layer implementation.</param>
141160 /// <param name="serialization">The serialization layer implementation.</param>
142- public ArangoDBClient ( IApiClientTransport transport , IApiClientSerialization serialization )
161+ /// <param name="suppressTransportDisposal">
162+ /// True to prevent disposal of the provided <see cref="IApiClientTransport"/> instance
163+ /// when <see cref="ArangoDBClient"/> is disposed.
164+ /// Default is false, to avoid a breaking change.
165+ /// </param>
166+ public ArangoDBClient (
167+ IApiClientTransport transport ,
168+ IApiClientSerialization serialization ,
169+ bool suppressTransportDisposal = false )
143170 {
144171 _transport = transport ;
172+ _suppressTransportDisposal = suppressTransportDisposal ;
145173
146174 InitializeApis ( _transport , serialization ) ;
147175 }
@@ -151,6 +179,10 @@ public ArangoDBClient(IApiClientTransport transport, IApiClientSerialization ser
151179 /// </summary>
152180 public void Dispose ( )
153181 {
182+ if ( _suppressTransportDisposal )
183+ {
184+ return ;
185+ }
154186 _transport . Dispose ( ) ;
155187 }
156188
@@ -168,9 +200,9 @@ private void InitializeApis(
168200 Graph = new GraphApiClient ( transport , serialization ) ;
169201 User = new UserApiClient ( transport , serialization ) ;
170202 Index = new IndexApiClient ( transport , serialization ) ;
171- BulkOperations = new BulkOperationsApiClient ( transport , serialization ) ;
203+ BulkOperations = new BulkOperationsApiClient ( transport , serialization ) ;
172204 View = new ViewApiClient ( transport , serialization ) ;
173- Analyzer = new AnalyzerApiClient ( transport , serialization ) ;
205+ Analyzer = new AnalyzerApiClient ( transport , serialization ) ;
174206 Admin = new AdminApiClient ( transport , serialization ) ;
175207 Pregel = new PregelApiClient ( transport , serialization ) ;
176208 }
0 commit comments