我正在尝试注册以下类型,如下所示:
IDbManager db= new DbManager(ConnectionDbType.SqlServer);
InjectionConstructor injectionConstructor = new InjectionConstructor(db);
.RegisterType<IDbManager, DbManager>(injectionConstructor)
通常是这样的:
IDbManager dbmanager = new DbManager(ConnectionDbType.SqlServer)
完整错误:
System.InvalidOperationException:'注入了构造函数 .ctor(DataAccessHandler.DbManager)不能与任何 IDbManager类型的公共构造函数。
错误: RegisterType(Invoke.Constructor(DataAccessHandler.DbManager)) 内部异常:ArgumentException:注入的构造函数 .ctor(DataAccessHandler.DbManager)不能与任何 IDbManager类型的公共构造函数。
我做错了什么?
答案 0 :(得分:0)
万一其他人遇到这个问题,我最近自己遇到了这个问题,我试图用一个 2 参数构造函数注册一个类型,但 Unity 一直声称它找不到构造函数。有问题的构造函数采用 Type
和 String
,最初我试图将它注入到注册中,如下所示:
...
new InjectionConstructor(this.GetType(), "some string")
事实证明,无论出于何种原因,Unity 都无法根据我提供的注入构造函数的值解析构造函数参数的类型。无论如何,对于第一个参数,我必须明确说明构造函数应该期望什么类型的参数,这意味着我的注册必须这样更改:
new InjectionConstructor(new InjectionParameter<Type>(this.GetType()), "some string")
InjectionParameter
的泛型参数必须与声明的构造函数参数类型匹配,以便 Unity 可以正确解析构造函数,但您为该参数传入的参数只需与该类型兼容。 InjectionParameter
也可以是任何其他 Unity 参数类型,例如 ResolvedParameter
等。