首页 > 解决方案 > 有没有办法让 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 虽然此注册是瞬态的,但每次请求时,都返回第一次调用时使用的类型?

简单的注入器委托文档

标签: simple-injector

解决方案


只需将开关移出注册:

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);
}

推荐阅读