2014-11-29 20 views
6

Varsayılan param ile yapıcı enjeksiyonu ile ilgili sorun. ÖrneğinVarsayılan params ile birlik kurucu

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

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

hatası:

[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

cevap

8

Birlik yapıcı parametre türlerini belirlemek için yansıma kullanır. Yapıcınız ile, FairFlexxDbContext ve bool parametrelerini buldu. Her türden bir örnek oluşturmaya çalışır ve bool üzerinde başarısız olur çünkü bir değer türüdür. Bu hatayı aşmak için sağladığınız varsayılan değeri tanımıyor.

Bunu işe almak için birkaç seçeneğiniz vardır. IAddressImportRepository numaranızı InjectionConstructor ile belirtin ve numaranıza'un yapıcı parametrelerinizi nasıl çözeceğini söyleyin veya bool parametresini bunun yerine bir özellik olarak taşıyın. Boole, isteğe bağlı bir parametre olduğundan, bir özellik olarak taşınmasını öneriyorum.

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

veya

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

public bool IsUseSecurePredicate { get; set; } 
İlgili konular