Unity Constructor with Default Parameters

Problem with entering constructor with default parameters.

for instance

container.RegisterType<IAddressImportRepository, AddressImportRepository>( new PerRequestLifetimeManager()); public AddressImportRepository( FairFlexxDbContext context, bool isUseSecurePredicate = true) : base(context, isUseSecurePredicate) { } 

Error:

[InvalidOperationException: Boolean type has no constructor available.]
Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForNullExistingObject (IBuilderContext context) +239 lambda_method (Closure, IBuilderContext) +60
Microsoft.Practices.ObjectBuilder2 <. > C__DisplayClass1.b__0 (IBuilderContext context) +71
Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp (IBuilderContext context) +42
Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp (IBuilderContext context) +333
Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp (IBuilderContext context) +274
Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp (NamedTypeBuildKey newBuildKey) +167
Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve (IBuilderContext context) +101 lambda_method (Closure, IBuilderContext) +425
Microsoft.Practices.ObjectBuilder2 <. > C__DisplayClass1.b__0 (IBuilderContext context) +71
Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp (IBuilderContext context) +42
Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp (IBuilderContext context) +333
Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp (IBuilderContext context) +274
Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp (NamedTypeBuildKey newBuildKey) +167
Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve (IBuilderContext context) +101 lambda_method (Closure, IBuilderContext) +222
Microsoft.Practices.ObjectBuilder2 <. > C__DisplayClass1.b__0 (IBuilderContext context) +71
Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp (IBuilderContext context) +42
Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp (IBuilderContext context) +333
Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp (IBuilderContext context) +274
Microsoft.Practices.Unity.UnityContainer.DoBuildUp (Type t, Existing Object, String Name, IEnumerable`1 resolverOverrides) +383

+6
source share
1 answer

Unity uses reflection to determine the types of constructor parameters. With your constructor, he found the FairFlexxDbContext and bool options. It tries to build an instance of each type and does not work on bool, because it is a value type. It does not recognize the default value that you provided in order to get through this error.

For this to work, you have a couple of options. Either tell us to register your IAddressImportRepository with InjectionConstructor and tell him how to enable your constructor options or move your bool parameter to a property instead. Since bool is an optional parameter, I would recommend moving it as a property.

 container.RegisterType<IAddressImportRepository, AddressImportRepository>( new PerRequestLifetimeManager(), new InjectionConstructor(new ResolvedParameter<FairFlexxDbContext>(), true)); 

or

 public AddressImportRepository(FairFlexxDbContext context) : base(context, true) { IsUseSecurePredicate = true; } public bool IsUseSecurePredicate { get; set; } 
+8
source

Source: https://habr.com/ru/post/978870/


All Articles