我也遇到了完全相同的问题,使用的是 ServiceStack 版本 4.5.6
这是我的注册码
container.RegisterAutoWiredAs<EventConditionalLoadingRepository, IEventConditionalLoadingRepository>()
.ReusedWithin(ReuseScope.Request);
container.RegisterAutoWiredAs<MetaRiskRepository, IMetaRiskRepository>()
.ReusedWithin(ReuseScope.Request);
container.RegisterAutoWiredAs<RiskStoreConnectivityService, IRiskStoreConnectivityService>()
.ReusedWithin(ReuseScope.Request);
container.Register<IUnitOfWork>(c =>
{
return new UnitOfWork();
}).ReusedWithin(ReuseScope.Request);
container.Register(c => (IUnitOfWorkEnlistable)c.Resolve<IUnitOfWork>())
.ReusedWithin(ReuseScope.Request);
这是我使用这些依赖项的服务
public AnalysisServiceStackService(
IEventConditionalLoadingRepository eventConditionalLoadingRepository,
IMetaRiskRepository metaRiskRepository,
IUnitOfWork unitOfWork)
{
_eventConditionalLoadingRepository = eventConditionalLoadingRepository;
_metaRiskRepository = metaRiskRepository;
_unitOfWork = unitOfWork;
_log.Information("AnalysisServiceStackService constructed");
}
您可以看到我在那里有一个日志语句,当我通过邮递员访问此服务以进行顺序请求时,我会记录此类事情
2017-03-30 15:34:10 [Information] AnalysisServiceStackService constructed
2017-03-30 15:34:11 [Information] AnalysisServiceStackService constructed
2017-03-30 15:34:12 [Information] AnalysisServiceStackService constructed
2017-03-30 15:34:13 [Information] AnalysisServiceStackService constructed
2017-03-30 15:34:14 [Information] AnalysisServiceStackService constructed
2017-03-30 15:34:15 [Information] AnalysisServiceStackService constructed
2017-03-30 15:34:16 [Information] AnalysisServiceStackService constructed
2017-03-30 15:34:17 [Information] AnalysisServiceStackService constructed
所以我知道服务本身应该尝试解析它所需的 IOC 组件的新 PerRequest 实例。
如果我随后使用 Visual Studio 并使用调试“生成对象 ID”功能来检查 IOC 容器为我提供的内容,它们是同一个实例。
调用 1:第一个请求
查看由 Visual Studio 创建的 #1 对象 ID
调用 2:第二次请求
查看#1 对象 ID,这意味着它不应该是同一个实例。它应该是新请求的新实例
为了证明这些是不同的调用,这里是构造函数运行两次的日志,每个请求一次
唯一为我解决此问题的是 Reuse.None
的建议修复
但如果我必须这样做,我不妨只使用 AutoFac 适配器(我更愿意使用它)并使用标准 AutoFac INstancePerLifeTimeScope:http://docs.autofac.org/en/latest/lifetime/instance-scope.html#instance-per-lifetime-scope
有什么想法吗?