Я пытаюсь настроить поставщика проверки подлинности модели, используя FluentValidation. Все работает, пока я не попытаюсь внедрить менеджера бизнес-уровня в конструктор валидатора, чтобы запустить некоторую бизнес-логику.Autofac scoping issue
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 модель Provider так:
// _validatorProvider is injected as per Autofac config above.
GlobalConfiguration.Configuration.Services.Add(typeof(ModelValidatorProvider), _validatorProvider);
Проблема происходит, когда мой валидатор завод пытается закрутить пример экземпляра валидатора. В этот момент я получаю следующее исключение:.
«Нет сфера с согласования тегов„AutofacWebRequest“не видна из сферы, в которой испрашивается экземпляр Как правило, это указывает на то, что компонент зарегистрирован как за HTTP запрос запрашивается компонентом SingleInstance() (или аналогичным сценарием). В рамках веб-интеграции всегда запрашиваются зависимости от DependencyResolver.Current или ILifetimeScopeProvider.RequestLifetime, никогда из самого контейнера. "
Я думаю, что проблема имеет что-то делать с тем, как Диспетчер & Repository сконфигурирован в Autofac, но я не знаю, что я не хватает.
EDIT: эта проблема возникает в проекте веб-API.
Как вы решаете валидатор? Не могли бы вы опубликовать свою фабричную фабрику Validator? –