c# - 首次调用 GetInstance、GetAllInstances、Verify 和部分 GetRegistration 调用后,容器无法更改
问题描述
我无法弄清楚为什么我在RegisterCollection
方法中收到此错误。我做的设置不正确吗?
在第一次调用 GetInstance、GetAllInstances、Verify 和一些 GetRegistration 调用后,无法更改容器。请参阅https://simpleinjector.org/locked以了解容器被锁定的原因。以下堆栈跟踪描述了容器被锁定的位置:
记录器注册
public static void Register(Container container)
{
container.RegisterConditional(typeof(ILogger),
c => typeof(NLogLogger<>).MakeGenericType(
c.Consumer?.ImplementationType ?? typeof(object)),
Lifestyle.Transient,
c => true);
...
}
container.RegisterCollection 抛出错误
container.Register<IEmailTemplatesService>(() => new EmailTemplatesService(emailTemplates,
container.GetInstance<IEventEmailTemplatesRepository>(),
container.GetInstance<IEmailTemplatesRepository>(),
container.GetInstance<IEventSettingsRepository>(),
container.GetInstance<IEmailsService>(),
container.GetInstance<IUnitOfWork>(),
container.GetInstance<IValidationProvider>()));
container.RegisterCollection<IStreamingMethod>(new List<IStreamingMethod>
{
new CubeProvider(container.GetInstance<ILogger>()),
new BallerTvProvider(container.GetInstance<ILogger>())
});
解决方案
您收到此错误是因为您GetInstance
在容器设置期间调用。正如例外情况和参考文档所解释的那样,这是不允许的。
问题是由于您尝试部分手动连接您的注册,而您应该更喜欢让 Simple Injector 为您完成繁重的工作并自动连接所有内容。因此,您应该将您的注册更改为以下内容:
container.Register<IEmailTemplatesService, EmailTemplatesService>();
container.RegisterCollection<IStreamingMethod>(new[]
{
typeof(CubeProvider),
typeof(BallerTvProvider)
});
推荐阅读
- git - 无法从我的帐户推送到 mac OS 中的存储库?
- python - 将每个列表元素与唯一的状态组合配对
- java - 为什么 java.lang.StackOverflowError: null 当我尝试打印我的实体
- python - 将小时和分钟添加到已保存的 django DateTimeField
- reactivesearch - 带有 cookie 身份验证的 Reactivesearch proxylike 后端
- java - 使用 GSON 将 JSON 字符串转换为 Java 对象
- c# - C# Directory.Move 但对于已经存在的文件夹 - 如何在不创建全新目录的情况下使用此方法或类似方法?
- c# - c# selenium if else 检查
- python - Azure Python 计费 API
- ios - IOS-Deploy 和 iOS 开发者证书