如果给定的类型对象如
var myType = typeof(SomeClass)
是否可以获得原始类型,作为接口或类并在泛型中使用它。
例如
var myObject = container.Resolve<myType>()
所以这会在这种情况下创建一个SomeClass类型的对象。
澄清我正在尝试围绕Ioc容器创建一个包装器,以便Ioc框架可以在不影响任何其他代码的情况下进行更改。
答案 0 :(得分:1)
“获取原始类型”并不清楚你的意思 - 但是如果你想在泛型中使用类型,你通常需要使用反射。例如:
var methodDefinition = container.GetType().GetMethod("Resolve");
var constructedMethod = methodDefinition.MakeGenericMethod(method);
object myObject = constructedMethod.Invoke(container, null);
myObject
变量的类型只能有用object
- 必须在编译时知道变量的类型(尽管它可能是通用的)。如果您使用的是C#4和.NET 4+,则可能会使用dynamic
作为替代方案 - 这取决于您之后尝试使用它做什么。
如果您发现自己必须使用相同的类型参数进行多次反射调用,请考虑将逻辑提取到新的泛型方法中 - 然后您可以使用反射一次来调用该方法,然后只需在方法中使用普通泛型。
答案 1 :(得分:1)
如果container.Resolve
表示UnityContainer.Resolve
个家庭之一,而不是overload,则接受Type
个实例:
var obj = container.Resolve(typeObj);
这是DI或IoC容器的常见特性 - 具有耦合分辨率重载,通用用例和非通用容器。
答案 2 :(得分:0)