我在使用 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>
您需要使用简单注入器注册一个空的 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);