2014-11-29 2 views
6

기본 매개 변수를 사용하여 생성자를 주입하는 데 문제가 있습니다. 예를 들어기본 매개 변수가있는 단일 생성자

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

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

오류 :

[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

답변

8

유니티는 생성자의 매개 변수 유형을 결정하기 위해 반사를 사용합니다. 생성자를 사용하여 FairFlexxDbContext 및 bool 매개 변수를 찾습니다. 각 유형의 인스턴스를 작성하려고 시도하고 bool이 값 유형이기 때문에 실패합니다. 이 오류를 극복하기 위해 제공 한 기본값을 인식하지 못합니다.

이 기능을 사용하려면 몇 가지 옵션이 있습니다. 등록자에게 IAddressImportRepositoryInjectionConstructor으로 말하고 에 생성자 매개 변수를 해결하거나 bool 매개 변수를 속성으로 옮겨라. bool은 선택적 매개 변수이므로이 속성을 속성으로 이동하는 것이 좋습니다.

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

또는

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

public bool IsUseSecurePredicate { get; set; } 
관련 문제