我有这个注册:
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>
有了这个解析,每个result
变量枚举都会调用一次实现的类。
如果我打电话ToList()
,result
那么一切都很好,只会被调用一次。
是调用ToList()
正确的方法还是注册有问题,应该改变?