我正在嘗試使用FluentValidation來設置自定義模型驗證器提供程序。一切工作,直到我嘗試注入一個業務層管理器到驗證器的構造函數來運行一些業務邏輯。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);
問題發生時,我的驗證工廠嘗試分拆啓動一個驗證器實例。在這一點上,我收到以下例外情況:
「沒有與標籤匹配的範圍'AutofacWebRequest'在請求實例的作用域中可見,這通常表示註冊爲每個HTTP請求的組件是被SingleInstance()組件(或類似的場景)請求。在Web集成下,總是從DependencyResolver.Current或ILifetimeScopeProvider.RequestLifetime請求依賴關係,而不是從容器本身。「
我認爲這個問題與管理器&存儲庫配置在Autofac中的方式有關,但我不知道我錯過了什麼。
編輯:在Web API項目中發生此問題。
你如何解決驗證器?你可以發佈你的Validator工廠實現嗎? –