私はこの登録を持っています:
builder.RegisterAssemblyTypes(assembly)
.AsClosedTypesOf(typeof(IBusinessRule<>))
.AsImplementedInterfaces()
.SingleInstance();
そして、私はそれを次のように解決します:
using (var scope = Container.BeginLifetimeScope())
{
var rules = Container.Resolve<IEnumerable<IBusinessRule<T>>>();
var result = rules.Select(x => x.IsValid(t));
if (result.Any(x => !x.Successful))
{
var msg = string.Join(Environment.NewLine, result.Where(x => !x.Successful).Select(x => x.Message));
return new OperationResultBase()
{
Message = msg,
Successful = false,
Operation = System.Reflection.MethodBase.GetCurrentMethod().Name
};
}
else
{
return new OperationResultBase(true);
}
}
問題は次の行にあります。
var result = rules.Select(x => x.IsValid(t));
その解決により、 を実装するクラスは、各変数列挙IBusinessRule<T>
ごとに 1 回呼び出されます。result
を呼び出すToList()
とresult
、すべて問題なく、1 回だけ呼び出されます。
ToList()
正しいアプローチを呼び出していますか、それとも登録に問題があり、変更する必要がありますか?