2014-11-29 12 views
6

Problem z wtryskiem konstruktora z domyślnymi parametrami.Konstruktor jedności z domyślnymi parametrami

Na przykład

container.RegisterType<IAddressImportRepository, AddressImportRepository>(
    new PerRequestLifetimeManager()); 

public AddressImportRepository(
    FairFlexxDbContext context, bool isUseSecurePredicate = true) 
    : base(context, isUseSecurePredicate) 
{ 
} 

Błąd:

[InvalidOperationException: The type Boolean does not have an accessible constructor.]
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, Object existing, String name, IEnumerable`1 resolverOverrides) +383

Odpowiedz

8

Unity używa odbicie w celu określenia rodzajów parametrów konstruktora. Z twoim konstruktorem znalazł parametry FairFlexxDbContext i bool. Próbuje skonstruować instancję każdego typu i nie powiedzie się na wartości bool, ponieważ jest to typ wartości. Nie rozpoznaje podanej wartości domyślnej, aby ominąć ten błąd.

Aby to zadziałało, masz kilka opcji. Albo powiedz rejestrowi swój IAddressImportRepository o numerze InjectionConstructor i powiedz, jak to zrobić, aby rozwiązać parametry konstruktora lub przenieś parametr bool, aby stał się właściwością. Ponieważ parametr bool jest parametrem opcjonalnym, zaleciłbym przeniesienie go jako własności.

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

lub

public AddressImportRepository(FairFlexxDbContext context) 
    : base(context, true) 
{ 
    IsUseSecurePredicate = true; 
} 

public bool IsUseSecurePredicate { get; set; } 
Powiązane problemy