diff --git a/src/Microsoft.AspNetCore.Razor.Design/Internal/AssemblyTagHelperDescriptorResolver.cs b/src/Microsoft.AspNetCore.Razor.Design/Internal/AssemblyTagHelperDescriptorResolver.cs index 8d61741..e5e1acf 100644 --- a/src/Microsoft.AspNetCore.Razor.Design/Internal/AssemblyTagHelperDescriptorResolver.cs +++ b/src/Microsoft.AspNetCore.Razor.Design/Internal/AssemblyTagHelperDescriptorResolver.cs @@ -14,10 +14,14 @@ namespace Microsoft.AspNetCore.Razor.Design.Internal { public class AssemblyTagHelperDescriptorResolver { + private const string TypeFullName = "Microsoft.AspNetCore.Mvc.DesignTimeMvcServiceCollectionProvider"; + private const string MvcAssemblyName = "Microsoft.AspNetCore.Mvc"; + private const string MethodName = "PopulateServiceCollection"; + private readonly TagHelperDescriptorFactory _tagHelperDescriptorFactory; private readonly TagHelperTypeResolver _tagHelperTypeResolver; - private bool _loadedAssembly; + private bool _isInitialized; private bool _hasMvcAssembly; private object _serviceCollectionProviderClassInstance; private MethodInfo _populateMethod; @@ -54,9 +58,9 @@ public IEnumerable Resolve(string assemblyName, ErrorSink e typeof(TagHelperDescriptor).FullName, ProtocolVersion)); } - if (!_loadedAssembly) + if (!_isInitialized) { - LoadMvcAssembly(); + EnsureMvcInitialized(); } ITagHelperDescriptorResolver resolver; @@ -101,17 +105,13 @@ protected virtual IEnumerable GetTagHelperTypes(string assemblyName, Error return _tagHelperTypeResolver.Resolve(assemblyName, SourceLocation.Zero, errorSink); } - private void LoadMvcAssembly() + private void EnsureMvcInitialized() { - const string typeFullName = "Microsoft.AspNetCore.Mvc.DesignTimeMvcServiceCollectionProvider"; - const string assemblyName = "Microsoft.AspNetCore.Mvc"; - const string methodName = "PopulateServiceCollection"; - - _loadedAssembly = true; + _isInitialized = true; try { - var providerClass = Type.GetType($"{typeFullName}, {assemblyName}", throwOnError: true); + var providerClass = Type.GetType($"{TypeFullName}, {MvcAssemblyName}", throwOnError: true); _serviceCollectionProviderClassInstance = Activator.CreateInstance(providerClass); @@ -119,7 +119,7 @@ private void LoadMvcAssembly() _populateMethod = providerClass.GetMethods(BindingFlags.Public | BindingFlags.Static) .FirstOrDefault(methodInfo => { - if (string.Equals(methodName, methodInfo.Name, StringComparison.Ordinal) + if (string.Equals(MethodName, methodInfo.Name, StringComparison.Ordinal) && methodInfo.ReturnParameter.ParameterType.Equals(typeof(void))) { var methodParams = methodInfo.GetParameters();