- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试使用 autofac 注册我的类时,出现以下错误:“实例注册 'GetAllDivisionsCommand' 只能支持 SingleInstance() 共享”。
我不明白为什么会收到此错误,但假设它与具有用于缓存的静态成员变量的类有关,因为这是该类唯一不同的地方。我在将任何其他类注册为 SingleInstance 或 InstancePerDependency 时没有遇到任何问题。
本质上,该类用于从数据库中检索很少更改的部门列表,并缓存结果。每次运行该命令时,它首先检查数据库上的更改,如果检测到更改,则重新运行查询;如果没有,则返回缓存列表。
所以我尝试将 GetAllDivisionsCommand 与 Autofac 注册为 IGetAllDivisionsCommand。 IGetAllDivisionsCommand本身实现了IInjectableCommand(只是一个标记接口(interface))和ICachedListCommand。具体命令类继承自抽象基类CachedListCommand,这是静态成员变量所在的位置。
有谁知道什么会导致此错误消息? SingleInstance 对我不起作用,因为我无法继续重复使用同一个 session 。
代码:
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();
}
最佳答案
RegisterInstace
顾名思义是 registering instances不是类型。
您需要的是RegisterType
:
foreach (var cmd in commands)
{
builder.RegisterType(cmd.Command).As(cmd.Interface).InstancePerLifetimeScope();
}
顺便说一下 Autofac scanning您的注册码功能大致相同:
builder
.RegisterAssemblyTypes(aCommandType.Assembly)
.AssignableTo<IInjectedCommand>()
.InNamespace(aCommandType.Namespace)
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
关于dependency-injection - Autofac错误: The instance registration can support SingleInstance() sharing only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15134163/
我是一名优秀的程序员,十分优秀!