当我尝试使用 autofac 注册我的课程时,我收到以下错误:“实例注册 'GetAllDivisionsCommand' 只能支持 SingleInstance() 共享”。
我不明白为什么会出现此错误,但假设这与具有用于缓存的静态成员变量的类有关,因为这是该类的唯一不同之处。我将任何其他类注册为 SingleInstance 或 InstancePerDependency 都没有任何问题。
本质上,该类用于从数据库中检索很少更改的部门列表,并缓存结果。每次运行命令时,它首先检查数据库上的更改,如果检测到更改,则重新运行查询;如果不是,则返回缓存列表。
所以我试图用 Autofac 将 GetAllDivisionsCommand 注册为 IGetAllDivisionsCommand。IGetAllDivisionsCommand 本身实现了 IInjectableCommand,它只是一个标记接口,以及 ICachedListCommand。具体的命令类继承自静态成员变量所在的抽象基类 CachedListCommand。
有谁知道什么会导致这个错误信息?SingleInstance 对我不起作用,因为我不能继续重用同一个会话。
代码:
Type commandType = typeof(IInjectedCommand);
Type aCommandType = typeof(GetAllDivisions);
var commands =
from t in aCommandType.Assembly.GetExportedTypes()
where t.Namespace == aCommandType.Namespace
&& t.IsClass
&& !t.IsAbstract
&& (commandType.IsAssignableFrom(t))
let iface = t.GetInterfaces().FirstOrDefault(x => "I" + t.Name == x.Name)
select new { Command = t, Interface = iface };
foreach (var cmd in commands)
{
builder.RegisterInstance(cmd.Command).As(cmd.Interface).InstancePerLifetimeScope();
}