FluentValidation을 사용하여 사용자 지정 모델 유효성 검사기 공급자를 설정하려고합니다. 모든 것은 비즈니스 계층 관리자를 validator의 생성자에 삽입하여 비즈니스 로직을 실행하기 전까지 작동합니다.Autofac 범위 지정 문제
public class Repository : IRepository
{
public Repository(IDbConnection)
{
}
}
public class Manager : IManager
{
public Manager(IRepository)
{
}
}
public AutofacValidatorFactory : ValidatorFactoryBase
{
}
public MyModelValidator : AbstractValidator<MyModel>
{
public MyModelValidator(IManager) { }
}
그래서 같이 모든 철사 :
builder.Register(c => new SqlConnection(ConfigurationManager.ConnectionStrings["MyCS"].ConnectionString))
.As<IDbConnection>().InstancePerApiRequest();
builder.RegisterType<Repository>()
.As<IRepository>()
.InstancePerDependency();
builder.RegisterType<Manager>()
.As<IManager>()
.InstancePerDependency();
builder.RegisterType<ValidatorFactory>()
.As<IValidatorFactory>()
.InstancePerLifetimeScope();
builder.RegisterType<FluentValidation.Mvc.WebApi.FluentValidationModelValidatorProvider>()
.As<ModelValidatorProvider>()
.InstancePerLifetimeScope();
AssemblyScanner.FindValidatorsInAssembly(assembly)
.ForEach(
result =>
Builder.RegisterType(result.ValidatorType).As(result.InterfaceType).InstancePerApiRequest());
을 마지막으로, 내가 FluentValidator 모델 제공자과 같이 추가 : 내 검사기 공장이 회전 할 때
// _validatorProvider is injected as per Autofac config above.
GlobalConfiguration.Configuration.Services.Add(typeof(ModelValidatorProvider), _validatorProvider);
문제가 발생 validator 인스턴스를 설정합니다. 어떤 점에서 나는 다음과 같은 예외 얻을 :.
"태그 일치하는 'AutofacWebRequest'와 어떤 범위는 인스턴스가 요청 된의 범위에서 보이지을 이것은 일반적으로 요구가 당 HTTP와 같은 구성 요소가 등록 된 것을 나타냅니다 SingleInstance() 구성 요소 (또는 이와 유사한 시나리오)에서 요청할 수 있습니다. 웹 통합에서는 항상 DependencyResolver.Current 또는 ILifetimeScopeProvider.RequestLifetime의 종속성을 요청하고 컨테이너 자체는 요청하지 마십시오. "
관리자가 & 저장소가 Autofac에서 구성되었지만 내가 무엇이 빠져 있는지 모르는 방법과 관련이 있다고 생각합니다.
편집 :이 문제는 웹 API 프로젝트에서 발생합니다. 나는 당신의 직접적인 질문에 대답 할 수없는 코드의 자세한 내용을 보지 않고
어떻게 검사기를 해결합니까? Validator 팩토리 구현을 게시 할 수 있습니까? –