From 7b169beeddf90ff50c6e45fd7ae5a1adacef23ea Mon Sep 17 00:00:00 2001 From: cabauman Date: Thu, 9 Jul 2020 20:51:50 +0900 Subject: [PATCH] Throw an informative registry exception --- src/ReactiveUI/Mixins/DependencyResolverMixins.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ReactiveUI/Mixins/DependencyResolverMixins.cs b/src/ReactiveUI/Mixins/DependencyResolverMixins.cs index a9c4ce8bf8..93025d932b 100644 --- a/src/ReactiveUI/Mixins/DependencyResolverMixins.cs +++ b/src/ReactiveUI/Mixins/DependencyResolverMixins.cs @@ -106,8 +106,13 @@ private static void RegisterType(IMutableDependencyResolver resolver, TypeInfo t [SuppressMessage("Redundancy", "CA1801: Redundant parameter", Justification = "Used on some platforms")] private static Func TypeFactory(TypeInfo typeInfo) { - return Expression.Lambda>(Expression.New( - typeInfo.DeclaredConstructors.First(ci => ci.IsPublic && !ci.GetParameters().Any()))).Compile(); + var parameterlessConstructor = typeInfo.DeclaredConstructors.FirstOrDefault(ci => ci.IsPublic && !ci.GetParameters().Any()); + if (parameterlessConstructor == null) + { + throw new Exception($"Failed to register type {typeInfo.FullName} because it's missing a parameterless constructor."); + } + + return Expression.Lambda>(Expression.New(parameterlessConstructor)).Compile(); } [SuppressMessage("Globalization", "CA1307: operator could change based on locale settings", Justification = "Replace() does not have third parameter on all platforms")]