【发布时间】:2016-05-25 23:09:40
【问题描述】:
我有这个注册:
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));
通过该解析,每个result 变量枚举都会调用实现IBusinessRule<T> 的类一次。
如果我在result 上调用ToList(),那么一切正常,只会调用一次。
调用ToList()是正确的方法还是注册有问题需要更改?
【问题讨论】:
标签: c# dependency-injection autofac resolve generic-interface