FluentValidation を使用してカスタム モデル バリデータ プロバイダーをセットアップしようとしています。ビジネスレイヤーマネージャーをバリデーターのコンストラクターに挿入してビジネスロジックを実行しようとするまで、すべてが機能します。
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 プロジェクトで発生しています。