在Unity App.Config文件中包含泛型类

joh*_*hnc 10 c# generics app-config unity-container

我有一个类型的类ISimpleCache<IBrokeredDataObject>,我想在App.Config文件中添加为类型别名(然后是类型)

这条线

<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" type="MyApplication.ISimpleCache<IBrokeredDataObject>, MyApplication" />
Run Code Online (Sandbox Code Playgroud)

由于<>显然是错误的,但我不相信逃避它们;

<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" type="MyApplication.ISimpleCache&lt;IBrokeredDataObject&gt;, MyApplication" />
Run Code Online (Sandbox Code Playgroud)

也是正确的.

我目前正在将我的代码拆分为使用Unity,因此距离可编译的代码库太远而无法快速测试,并希望在此处得到一些确认.

Hos*_*Aly 22

看看这篇博文:

要编写泛型类型,请使用`符号,后跟接口/类接收的泛型类型的数量.

同一页的评论说:

为了在泛型中使用常量类型,您需要使用方括号([[ ]]).

所以我猜你的配置文件应该包含这样的东西:

<typeAlias alias="ISimpleCacheOfIBrokeredDataObject"
   type="MyApplication.ISimpleCache`1[[MyApplication.IBrokeredDataObject, MyApplication]], MyApplication" />
Run Code Online (Sandbox Code Playgroud)

注意使用"grave accent"或"backquote"字符(`),而不是正常的单引号(').

  • 值得补充的是它必须是'NOT'(微妙但重要的区别) (3认同)

ken*_*ken 14

我宁愿对上面的答案发表评论,但我的得分还不够高.

Type.GetType方法(字符串)的语法记录在这里:http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx

有很多例子,其中一些是我粘贴在下面的.

具有一个类型参数的泛型类型

Type.GetType("MyGenericType`1[MyType]")
Run Code Online (Sandbox Code Playgroud)

具有两个类型参数的泛型类型

Type.GetType("MyGenericType`2[MyType,AnotherType]")
Run Code Online (Sandbox Code Playgroud)

具有两个程序集限定类型参数的泛型类型

Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Run Code Online (Sandbox Code Playgroud)

具有程序集限定类型参数的程序集限定泛型类型

Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
Run Code Online (Sandbox Code Playgroud)

泛型类型,其类型参数是具有两个类型参数的泛型类型

Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")
Run Code Online (Sandbox Code Playgroud)