Skip to content

Commit 5c8eb41

Browse files
committed
Check for any parameterless constructor
1 parent 00ff76e commit 5c8eb41

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

Orm/Xtensive.Orm/Orm/Providers/StorageDriver.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,15 @@ private static IReadOnlyCollection<IConnectionHandler> CreateConnectionHandlers(
178178
{
179179
var instances = new List<IConnectionHandler>();
180180
factories = new ConcurrentDictionary<Type, Func<IConnectionHandler>>();
181-
foreach (var item in connectionHandlerTypes) {
182-
var handlerFactory = (Func<IConnectionHandler>) FactoryCreatorMethod.MakeGenericMethod(item).Invoke(null, null);
181+
foreach (var type in connectionHandlerTypes) {
182+
var ctor = type.GetConstructor(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, null, Type.EmptyTypes, null);
183+
if (ctor == null) {
184+
throw new NotSupportedException(string.Format(Strings.ExConnectionHandlerXHasNoParameterlessConstructor, type));
185+
}
186+
187+
var handlerFactory = (Func<IConnectionHandler>) FactoryCreatorMethod.MakeGenericMethod(type).Invoke(null, null);
183188
instances.Add(handlerFactory());
184-
factories[item] = handlerFactory;
189+
factories[type] = handlerFactory;
185190
}
186191
if (factories.Count == 0)
187192
factories = null;

Orm/Xtensive.Orm/Strings.Designer.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Orm/Xtensive.Orm/Strings.resx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3470,4 +3470,7 @@ Error: {1}</value>
34703470
<data name="ExCantModifyActiveOrDisposedScope" xml:space="preserve">
34713471
<value>Can't modify Active or Disposed scope.</value>
34723472
</data>
3473-
</root>
3473+
<data name="ExConnectionHandlerXHasNoParameterlessConstructor" xml:space="preserve">
3474+
<value>Connection handler '{0}' has no parameterless constructor.</value>
3475+
</data>
3476+
</root>

0 commit comments

Comments
 (0)