simple-injector - 有没有办法让 Simple Injector 只为 Transient 注册调用一次委托?
问题描述
我有一些依赖于配置设置的条件注册。代码工作正常,但在调试时我注意到每次请求 IDocumentService 时都会调用委托。
container.Register<IDocumentService>(() =>
{
switch (Environment.UserConfiguration.RealDocumentPersistenceType)
{
case DocumentPersistenceType.Sql:
case DocumentPersistenceType.Disk:
return container.GetInstance<DocumentService>();
case DocumentPersistenceType.IManage:
return container.GetInstance<IManageDocumentService>();
default:
throw new ArgumentOutOfRangeException(nameof(Environment.UserConfiguration.RealDocumentPersistenceType),
Environment.UserConfiguration.RealDocumentPersistenceType.ToString());
}
}, Lifestyle.Transient);
文档指出,委托只为“单个实例”调用一次,这是有道理的,但有没有办法告诉 SI 虽然此注册是瞬态的,但每次请求时,都返回第一次调用时使用的类型?
解决方案
只需将开关移出注册:
switch (Environment.UserConfiguration.RealDocumentPersistenceType)
{
case DocumentPersistenceType.Sql:
case DocumentPersistenceType.Disk:
container.Register<IDocumentService, DocumentService>();
break;
case DocumentPersistenceType.IManage:
container.Register<IDocumentService, ManageDocumentService>();
break;
default:
throw new ArgumentOutOfRangeException(); } }, Lifestyle.Transient);
}
推荐阅读
- node.js - 无法运行“npm run serve”Vue 项目,TypeError:无法读取未定义的属性“db”
- python - 如何加密数据并将有效负载作为表单数据发送到 Flask App 端点
- python-3.x - AttributeError:“SlidePlaceholder”对象没有属性“insert_pictures”
- flask - 将 wtforms 表单验证拆分为同一页面上的各个部分
- docker - 在 docker windows 上连接时出错 - 必须以提升的权限运行才能连接
- android-studio - 使用后退按钮返回相同位置?
- linux - 在 linux 内核中删除 early_drop() 函数的副作用
- c# - 如何在WPF MVVM C#中使Expander控件中的箭头符号可点击
- amazon-web-services - 使用 Python3.9 的 AWS 深度学习 AMI
- c++ - 使用指针时 C++ 中出现奇怪的分段错误