代码之家  ›  专栏  ›  技术社区  ›  Jean-François Beauchamp

Unity依赖解析程序的正确配置是否适用于MvcMembership?

  •  2
  • Jean-François Beauchamp  · 技术社区  · 12 年前

    我找不到合适的Unity配置来让它与MvcMembership一起工作。

    此时,我收到以下错误消息:

    无法构造类型Boolean。您必须配置 容器来提供此值。

    以下是我注册依赖项的代码:

        container.RegisterInstance<MembershipProvider>(Membership.Provider);
    
        container.RegisterType<IMembershipSettings,AspNetMembershipProviderSettingsWrapper>();
        container.RegisterType<IUserService, AspNetMembershipProviderWrapper>();
        container.RegisterType<IPasswordService, AspNetMembershipProviderWrapper>();
        container.RegisterType<IRolesService, AspNetRoleProviderWrapper>();
        container.RegisterType<ISmtpClient, SmtpClientProxy>();
        container.RegisterType<IRegistrationSettings, RegistrationSettings>();
    

    这是我的堆栈跟踪:

    [InvalidOperationException:无法构造类型Boolean。必须配置容器才能提供此值。] Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy。GuardTypeIsNonPrimitive(IBuilderContext上下文,SelectedConstructor SelectedConstructor)+277 Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.PreBuildUp(IBuilderContext上下文)+485 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext上下文)+434 Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlanCreatorPolicy.CreatePlan(IBuilderContext上下文,NamedTypeBuildKey buildKey)+400 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext上下文)+222 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext上下文)+434 Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)+318 BuildUp_MvcMembership.Settings.RegistrationSettings(IBuilderContext)+216 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext上下文)+304 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext上下文)+434 Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)+318 BuildUp_MvcMembership.Settings.AspNetMembershipProviderSettingsWrapper(IBuilderContext)+220 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext上下文)+304 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext上下文)+434 Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)+318 BuildUp_MyProject.Web.Areas.MvcMembership.Controllers.UserAdministrationController(IBuilderContext)+223 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext上下文)+304 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext上下文)+434 Microsoft.Practices.Unity.UnityContainer.DoBuildUp(类型t,现有对象,字符串名称,IEnumerable`1 resolverOverrides)+440

    [ResolutionFailedException:解析依赖项失败,type=“MyProject.Web.Areas.MvcMembership.Controllers.UserAdministrationController”,name=“(none)”。 解析时发生异常:。

    异常为:InvalidOperationException-无法构造布尔类型。您必须配置容器以提供此值。

    发生异常时,容器为:

    正在解析MyProject.Web.Areas.MvcMembership.Controllers.UserAdministrationController,(无) 正在解析构造函数MyProject.Web.Areas.MvcMembership.Controllers.UserAdministrationController的参数“membershipSettings”(MvcMembership.Settings.IMembershipSettings membershipSettings.MvcMembership.IUserService userService,MvcMembership.IPasswordService passwordService,MvcMembership.IRolesService,MvcMembership.ISmtpClient smtpClient) 正在解析MvcMembership.Settings.AspNetMembershipProviderSettingsWrapper,(none)(从MvcMembership.Settings.IMembershipSettings映射而来,(none)) 正在解析构造函数MvcMembership.Settings.AspNetMembershipProviderSettingsWrapper的参数“registration” 正在解析MvcMembership.Settings.RegistrationSettings,(none)(从MvcMembership.Settings.IRegistrationSettings映射而来,(none)) 正在解析构造函数MvcMembership.Settings.RegistrationSettings的参数“requiresUniqueEmailAddress”(System.Boolean requiresUnique EmailAddress) 正在解析System.Boolean,(无) ] Microsoft.Practices.Unity.UnityContainer.DoBuildUp(类型t,现有对象,字符串名称,IEnumerable 1 resolverOverrides) +546 Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name, IEnumerable 1个解析器覆盖)+20 System.Web.Mvc.DefaultControllerActivator.Create(RequestContext RequestContext,Type controllerType)+68

    [无效操作异常:尝试创建类型为“MyProject.Web.Areas.MvcMembership.Controllers.UserAdministrationController”的控制器时出错。请确保该控制器具有无参数公共构造函数。] System.Web.Mvc.DefaultControllerActivator.Create(RequestContext RequestContext,Type controllerType)+634003 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext RequestContext,String controllerName)+93 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBasehttpContext,IController&controller,IContrlerFactory&factory)+346 System.Web.Mvc.<>c_ 显示类6.b _2()+71 System.Web.Mvc.<>c_显示类b 1.<ProcessInApplicationTrust>b__a() +19 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func 1函数)+161 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+405 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,Boolean和completedSynchronously)+375

    1 回复  |  直到 12 年前
        1
  •  1
  •   Jean-François Beauchamp    12 年前

    我通过在所述构造函数上方使用以下属性指定要用于UserAdministrationController的构造函数来解决此问题:

    [Microsoft.Practices.Unity.InjectionConstructor]
    

    当构造函数重载时,Unity会尝试使用参数最多的构造函数。使用InjectionConstructor属性,我强制它使用参数为零的构造函数。