C# 在新ASP.NET MVC 5项目中安装Unity时出现InvalidRegistrationException
在使用Unity作为IoC容器之前,我已经开发了2到3个ASP.NET MVC项目。但现在我在web应用程序中安装Unity时遇到了一个问题。我不明白发生了什么,我想这将是我忘记配置的东西 我的IDE是Visual Studio Professional 2017(15.9.24)。我创建了一个新的ASP.NET Web应用程序(.NET Framework)项目,名为C# 在新ASP.NET MVC 5项目中安装Unity时出现InvalidRegistrationException,c#,asp.net-mvc,visual-studio-2017,unity-container,C#,Asp.net Mvc,Visual Studio 2017,Unity Container,在使用Unity作为IoC容器之前,我已经开发了2到3个ASP.NET MVC项目。但现在我在web应用程序中安装Unity时遇到了一个问题。我不明白发生了什么,我想这将是我忘记配置的东西 我的IDE是Visual Studio Professional 2017(15.9.24)。我创建了一个新的ASP.NET Web应用程序(.NET Framework)项目,名为WebAppWithUnitywith.NET 4.7.2。我选择MVC模板,检查WebAPI选项,然后选择个人用户帐户进行身份
WebAppWithUnity
with.NET 4.7.2。我选择MVC模板,检查WebAPI选项,然后选择个人用户帐户进行身份验证。我不会更改任何内容并运行应用程序,因此会打开默认索引页。我可以导航到关于、联系、注册或登录页面。一切正常。我停止申请
现在,我使用Nuget将Unity.Mvc包(v5.11.1)添加到项目中。在弹出窗口中,我接受Microsoft.AspNet.WebPages、Microsoft.AspNet.Razor和Microsoft.AspNet.Mvc软件包的许可证。使用Unity,除了安装这些软件包外,还会在App_Start文件夹中创建以下文件:UnityConfig.cs和UnityMvcActivator.cs。我不再做任何更改,而是运行应用程序。默认索引页再次打开。我可以导航到About和Contact,但是如果我尝试导航到Register或Login页面,我会得到一个Unity.Exceptions.InvalidRegistrationException
UnityConfig.cs文件内容:
using System;
using Unity;
namespace WebAppWithUnity
{
/// <summary>
/// Specifies the Unity configuration for the main container.
/// </summary>
public static class UnityConfig
{
#region Unity Container
private static Lazy<IUnityContainer> container =
new Lazy<IUnityContainer>(() =>
{
var container = new UnityContainer();
RegisterTypes(container);
return container;
});
/// <summary>
/// Configured Unity Container.
/// </summary>
public static IUnityContainer Container => container.Value;
#endregion
/// <summary>
/// Registers the type mappings with the Unity container.
/// </summary>
/// <param name="container">The unity container to configure.</param>
/// <remarks>
/// There is no need to register concrete types such as controllers or
/// API controllers (unless you want to change the defaults), as Unity
/// allows resolving a concrete type even if it was not previously
/// registered.
/// </remarks>
public static void RegisterTypes(IUnityContainer container)
{
// NOTE: To load from web.config uncomment the line below.
// Make sure to add a Unity.Configuration to the using statements.
// container.LoadConfiguration();
// TODO: Register your type's mappings here.
// container.RegisterType<IProductRepository, ProductRepository>();
}
}
}
using System.Linq;
using System.Web.Mvc;
using Unity.AspNet.Mvc;
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(WebAppWithUnity.UnityMvcActivator), nameof(WebAppWithUnity.UnityMvcActivator.Start))]
[assembly: WebActivatorEx.ApplicationShutdownMethod(typeof(WebAppWithUnity.UnityMvcActivator), nameof(WebAppWithUnity.UnityMvcActivator.Shutdown))]
namespace WebAppWithUnity
{
/// <summary>
/// Provides the bootstrapping for integrating Unity with ASP.NET MVC.
/// </summary>
public static class UnityMvcActivator
{
/// <summary>
/// Integrates Unity when the application starts.
/// </summary>
public static void Start()
{
FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(UnityConfig.Container));
DependencyResolver.SetResolver(new UnityDependencyResolver(UnityConfig.Container));
// TODO: Uncomment if you want to use PerRequestLifetimeManager
// Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
}
/// <summary>
/// Disposes the Unity container when the application is shut down.
/// </summary>
public static void Shutdown()
{
UnityConfig.Container.Dispose();
}
}
}
堆栈跟踪:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
[InvalidRegistrationException: Exception of type 'Unity.Exceptions.InvalidRegistrationException' was thrown.]
[InvalidOperationException: No public constructor is available for type Microsoft.AspNet.Identity.IUserStore`1[WebAppWithUnity.Models.ApplicationUser].]
Unity.Processors.<>c.<GetResolver>b__15_1(BuilderContext& c) in C:\projects\container\src\Processors\Constructor\ConstructorResolution.cs:52
Unity.Processors.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162
Unity.Processors.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162
Unity.Processors.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162
Unity.<>c__DisplayClass111_0.<OptimizingFactory>b__0(BuilderContext& c) in C:\projects\container\src\UnityContainer.Resolution.cs:271
Unity.Strategies.BuildPlanStrategy.PreBuildUp(BuilderContext& context) in C:\projects\container\src\Strategies\BuildPlanStrategy.cs:80
Unity.<>c.<.ctor>b__73_2(BuilderStrategy[] chain, BuilderContext& context) in C:\projects\container\src\UnityContainer.Resolution.cs:420
Unity.Builder.BuilderContext.Resolve(Type type, String name, InternalRegistration registration) in C:\projects\container\src\Builder\Context\BuilderContext.cs:177
Unity.Builder.BuilderContext.Resolve(Type type, String name) in C:\projects\container\src\Builder\Context\BuilderContext.cs:44
Unity.Builder.BuilderContext.Resolve(ParameterInfo parameter, Object value) in C:\projects\container\src\Builder\Context\BuilderContext.cs:217
Unity.Processors.<>c__DisplayClass7_0.<CreateParameterResolvers>b__0(BuilderContext& context) in C:\projects\container\src\Processors\Parameters\ParametersProcessor.cs:121
Unity.Processors.<>c__DisplayClass16_0.<GetResolverDelegate>b__0(BuilderContext& c) in C:\projects\container\src\Processors\Constructor\ConstructorResolution.cs:77
Unity.Processors.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162
Unity.Processors.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162
Unity.Processors.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162
Unity.<>c__DisplayClass111_0.<OptimizingFactory>b__0(BuilderContext& c) in C:\projects\container\src\UnityContainer.Resolution.cs:271
Unity.Strategies.BuildPlanStrategy.PreBuildUp(BuilderContext& context) in C:\projects\container\src\Strategies\BuildPlanStrategy.cs:80
Unity.<>c.<.ctor>b__73_2(BuilderStrategy[] chain, BuilderContext& context) in C:\projects\container\src\UnityContainer.Resolution.cs:420
Unity.Builder.BuilderContext.Resolve(Type type, String name, InternalRegistration registration) in C:\projects\container\src\Builder\Context\BuilderContext.cs:177
Unity.Builder.BuilderContext.Resolve(Type type, String name) in C:\projects\container\src\Builder\Context\BuilderContext.cs:44
Unity.Builder.BuilderContext.Resolve(ParameterInfo parameter, Object value) in C:\projects\container\src\Builder\Context\BuilderContext.cs:217
Unity.Processors.<>c__DisplayClass7_0.<CreateParameterResolvers>b__0(BuilderContext& context) in C:\projects\container\src\Processors\Parameters\ParametersProcessor.cs:121
Unity.Processors.<>c__DisplayClass16_0.<GetResolverDelegate>b__0(BuilderContext& c) in C:\projects\container\src\Processors\Constructor\ConstructorResolution.cs:77
Unity.Processors.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162
Unity.Processors.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162
Unity.Processors.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) in C:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162
Unity.<>c__DisplayClass111_0.<OptimizingFactory>b__0(BuilderContext& c) in C:\projects\container\src\UnityContainer.Resolution.cs:271
Unity.Strategies.BuildPlanStrategy.PreBuildUp(BuilderContext& context) in C:\projects\container\src\Strategies\BuildPlanStrategy.cs:80
Unity.<>c.<.ctor>b__73_1(BuilderContext& context) in C:\projects\container\src\UnityContainer.Resolution.cs:344
[ResolutionFailedException: Resolution failed with error: No public constructor is available for type Microsoft.AspNet.Identity.IUserStore`1[WebAppWithUnity.Models.ApplicationUser].
For more detailed information run Unity in debug mode: new UnityContainer(ModeFlags.Diagnostic)]
Unity.<>c.<.ctor>b__73_1(BuilderContext& context) in C:\projects\container\src\UnityContainer.Resolution.cs:363
Unity.UnityContainer.Unity.IUnityContainer.Resolve(Type type, String name, ResolverOverride[] overrides) in C:\projects\container\src\UnityContainer.IUnityContainer.cs:244
Unity.UnityContainerExtensions.Resolve(IUnityContainer container, Type t, ResolverOverride[] overrides) in C:\projects\abstractions\src\Extensions\Container\UnityContainer.cs:913
Unity.AspNet.Mvc.UnityDependencyResolver.GetService(Type serviceType) in C:\projects\aspnet-mvc\src\UnityDependencyResolver.cs:37
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +41
[InvalidOperationException: An error occurred when trying to create a controller of type 'WebAppWithUnity.Controllers.AccountController'. Make sure that the controller has a parameterless public constructor.]
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +178
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +102
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +188
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +50
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +105
System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +50
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +163
[InvalidRegistrationException:引发了类型为“Unity.Exceptions.InvalidRegistrationException”的异常。]
[InvalidOperationException:没有可用于Microsoft.AspNet.Identity.IUserStore`1[WebAppWithUnity.Models.ApplicationUser]类型的公共构造函数。]
c:\projects\container\src\Processors\Constructor\ConstructorResolution.cs:52中的Unity.Processors.c.b\u15\u1(BuilderContext&c)
Unity.Processors.c\uuu在c:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162中显示Class8\u0.b\u0(BuilderContext&c)
Unity.Processors.c\uuu在c:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162中显示Class8\u0.b\u0(BuilderContext&c)
Unity.Processors.c\uuu在c:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162中显示Class8\u0.b\u0(BuilderContext&c)
Unity.c\uu在c:\projects\container\src\UnityContainer.Resolution.cs:271中显示Class111\u 0.b\uu 0(BuilderContext&c)
C:\projects\container\src\Strategies\buildplantstrategy.cs:80中的Unity.Strategies.buildplantstrategy.prebuild(BuilderContext和context)
c:\projects\container\src\UnityContainer.Resolution.cs:420中的Unity.c.b_uu73_2(BuilderStrategy[]chain,BuilderContext和context)
C:\projects\container\src\Builder\Context\BuilderContext.cs:177中的Unity.Builder.BuilderContext.Resolve(类型、字符串名称、内部注册)
C:\projects\container\src\Builder\Context\BuilderContext.cs:44中的Unity.Builder.BuilderContext.Resolve(类型、字符串名称)
C:\projects\container\src\Builder\Context\BuilderContext.cs:217中的Unity.Builder.BuilderContext.Resolve(ParameterInfo参数,对象值)
Unity.Processors.c_uuu在c:\projects\container\src\Processors\Parameters\ParametersProcessor.cs:121中显示Class7_0.b_uu0(BuilderContext和context)
Unity.Processors.c\uu在c:\projects\container\src\Processors\Constructor\ConstructorResolution.cs:77中显示Class16\u0.b\u0(BuilderContext&c)
Unity.Processors.c\uuu在c:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162中显示Class8\u0.b\u0(BuilderContext&c)
Unity.Processors.c\uuu在c:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162中显示Class8\u0.b\u0(BuilderContext&c)
Unity.Processors.c\uuu在c:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162中显示Class8\u0.b\u0(BuilderContext&c)
Unity.c\uu在c:\projects\container\src\UnityContainer.Resolution.cs:271中显示Class111\u 0.b\uu 0(BuilderContext&c)
C:\projects\container\src\Strategies\buildplantstrategy.cs:80中的Unity.Strategies.buildplantstrategy.prebuild(BuilderContext和context)
c:\projects\container\src\UnityContainer.Resolution.cs:420中的Unity.c.b_uu73_2(BuilderStrategy[]chain,BuilderContext和context)
C:\projects\container\src\Builder\Context\BuilderContext.cs:177中的Unity.Builder.BuilderContext.Resolve(类型、字符串名称、内部注册)
C:\projects\container\src\Builder\Context\BuilderContext.cs:44中的Unity.Builder.BuilderContext.Resolve(类型、字符串名称)
C:\projects\container\src\Builder\Context\BuilderContext.cs:217中的Unity.Builder.BuilderContext.Resolve(ParameterInfo参数,对象值)
Unity.Processors.c_uuu在c:\projects\container\src\Processors\Parameters\ParametersProcessor.cs:121中显示Class7_0.b_uu0(BuilderContext和context)
Unity.Processors.c\uu在c:\projects\container\src\Processors\Constructor\ConstructorResolution.cs:77中显示Class16\u0.b\u0(BuilderContext&c)
Unity.Processors.c\uuu在c:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162中显示Class8\u0.b\u0(BuilderContext&c)
Unity.Processors.c\uuu在c:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162中显示Class8\u0.b\u0(BuilderContext&c)
Unity.Processors.c\uuu在c:\projects\container\src\Processors\Abstracts\MemberProcessor.cs:162中显示Class8\u0.b\u0(BuilderContext&c)
Unity.c\uu在c:\projects\container\src\UnityContainer.Resolution.cs:271中显示Class111\u 0.b\uu 0(BuilderContext&c)
C:\projects\container\src\Strategies\buildplantstrategy.cs:80中的Unity.Strategies.buildplantstrategy.prebuild(BuilderContext和context)
c:\projects\container\src\UnityContainer.Resolution.cs:344中的Unity.c.b\u 73\u 1(BuilderContext和context)
[ResolutionFailedException:解析失败,错误为:无公共构造函数