Unity System.InvalidOperationException:'找不到与成员匹配的数据

时间:2019-06-06 19:05:30

标签: c# unity-container

我正在尝试注册以下类型,如下所示:

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类型的公共构造函数。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

万一其他人遇到这个问题,我最近自己遇到了这个问题,我试图用一个 2 参数构造函数注册一个类型,但 Unity 一直声称它找不到构造函数。有问题的构造函数采用 TypeString,最初我试图将它注入到注册中,如下所示:

...
new InjectionConstructor(this.GetType(), "some string")

事实证明,无论出于何种原因,Unity 都无法根据我提供的注入构造函数的值解析构造函数参数的类型。无论如何,对于第一个参数,我必须明确说明构造函数应该期望什么类型的参数,这意味着我的注册必须这样更改:

new InjectionConstructor(new InjectionParameter<Type>(this.GetType()), "some string")

InjectionParameter 的泛型参数必须与声明的构造函数参数类型匹配,以便 Unity 可以正确解析构造函数,但您为该参数传入的参数只需与该类型兼容。 InjectionParameter 也可以是任何其他 Unity 参数类型,例如 ResolvedParameter 等。