注册 IEnumerable 的两个实例时出现问题<Type>

问题描述 投票:0回答:1

我在使用 SimpleInjector 时遇到问题,但不知道如何解决。我收到以下错误:

配置无效。创建 IMiddleware 类型的实例失败。 LogContextMiddleware 类型的构造函数包含名称为“controllerTypeExclusionList”且类型为 IEnumerable 的参数,但 IEnumerable 未注册。要解析 IEnumerable,它必须在容器中注册。您可以使用 Container.Collection.Register 重载之一来注册 Type 类型的集合,或使用 Container.Collection.Append 重载之一来将单个注册追加到集合中。如果您打算解析 Type 元素的空集合,请确保注册一个空集合;即使没有任何实例,简单注入器也需要调用 Container.Collection.Register。请参阅 https://simpleinjector.org/collections 了解有关注册和解析集合的更多信息。

有人可以帮助我吗?预先感谢,我的代码是:

// Log Context Middleware
var controllerTypeLogExclusionList = new List<Type> { typeof(StatusController) };
container.Register<LogContextMiddleware>(
   instanceCreator: () => new LogContextMiddleware(
       controllerTypeExclusionList: controllerTypeLogExclusionList,
   logger: container.GetInstance<ILogger>()),
   lifestyle: Lifestyle.Transient);

// Authorization Middleware
var controllerTypeAuthorizationExclusionList = new List<Type> { typeof(StatusController), typeof(PruebaSinAuthController) };
container.Register<AuthorizationMiddleware<AppToken>>(
   instanceCreator: () => new AuthorizationMiddleware<AppToken>(
       appTokenRepository: container.GetInstance<IAppTokenRepository<AppToken>>(),
       controllerTypeExclusionList: controllerTypeAuthorizationExclusionList,
   logger: container.GetInstance<ILogger>()),
   lifestyle: Lifestyle.Transient);

controllerTypeExclusionList 在这两种情况下都是

IEnumerable<Type>

c# .net dependency-injection ioc-container simple-injector
1个回答
0
投票

您需要使用简单注入器注册一个空的 Type 元素集合。

container.Collection.Register<Type>(new Type[] { });

之后:

// Log Context Middleware
var controllerTypeLogExclusionList = new List<Type> { typeof(StatusController) };
container.Register<LogContextMiddleware>(
    instanceCreator: () => new LogContextMiddleware(
        controllerTypeExclusionList: controllerTypeLogExclusionList,
        logger: container.GetInstance<ILogger>()),
    lifestyle: Lifestyle.Transient);

// Authorization Middleware
var controllerTypeAuthorizationExclusionList = new List<Type> { typeof(StatusController), typeof(PruebaSinAuthController) };
container.Register<AuthorizationMiddleware<AppToken>>(
    instanceCreator: () => new AuthorizationMiddleware<AppToken>(
        appTokenRepository: container.GetInstance<IAppTokenRepository<AppToken>>(),
        controllerTypeExclusionList: controllerTypeAuthorizationExclusionList,
        logger: container.GetInstance<ILogger>()),
    lifestyle: Lifestyle.Transient);
© www.soinside.com 2019 - 2024. All rights reserved.