gpt4 book ai didi

c# - Assembly.CreateInstance 解析 IoC Container

转载 作者:太空狗 更新时间:2023-10-29 21:54:03 25 4
gpt4 key购买 nike

我正在尝试使用以下代码创建一个类的实例(在运行时通过字符串):

Assembly assembly = Assembly.GetAssembly(typeAssembly);
object instance = assembly.CreateInstance(typeName); //throws MissingMethodException
Type classType = instance.GetType();

但是,我尝试实例化的类在构造函数中有两个参数,由 Unity IoC 容器解析。

当我执行上面的代码时,它抛出“System.MissingMethodException”。

我在网上搜索过,Assembly.CreateInstance 似乎无法解决 Unity 依赖注入(inject)问题。

这是死胡同还是有什么方法可以使用“CreateInstance”方法实例化类并解决 Unity 依赖项?

最佳答案

CreateInstance 可以接收params,你可以通过ctor params这样调用它:

(T)Activator.CreateInstance(typeof(T), param1, param2);

Activator.CreateInstance 不知道您的应用程序中有 IOC 模块。它只是创建一个类型的实例。

现在你有两个选择:

1.使用您的 IOC 管理器创建实例 - 在我看来,这似乎是正确的做事方式,并且可能是您正在寻找的。您的 IOC 管理器 (Unity) 在注入(inject)所有依赖项时解析类型。

var instance = UnityManager.Resolve(typeName); // UnityManager is a manager that holds your unity container.

2.使用 Unity 获取 ctor 参数并在没有注入(inject)的情况下创建实例(Activator + 简单的参数传递)。 您可能不想这样做。我将其添加为另一个解释示例。

var param1 = UnityManager.Resolve(typeOfParam1); 
var param2 = UnityManager.Resolve(typeOfParam2);
Assembly assembly = Assembly.GetAssembly(typeAssembly);
object instance = assembly.CreateInstance(typeName, param1,param2);

关于c# - Assembly.CreateInstance 解析 IoC Container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24257063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com