我正在从外部程序集中加载一个类型,并希望创建该类型的一个实例。但是,此类型/类是为当前由Ninject
. 如何使用Ninject
创建这种类型的实例并注入任何构造函数依赖项?
下面是我如何获得这种类型。
Assembly myAssembly = Assembly.LoadFrom("MyAssembly.dll");
Type type = myAssembly.GetType("IMyType");
我正在从外部程序集中加载一个类型,并希望创建该类型的一个实例。但是,此类型/类是为当前由Ninject
. 如何使用Ninject
创建这种类型的实例并注入任何构造函数依赖项?
下面是我如何获得这种类型。
Assembly myAssembly = Assembly.LoadFrom("MyAssembly.dll");
Type type = myAssembly.GetType("IMyType");
假设您已经创建了Kernel
,您应该能够通过以下方式创建并解决它:
kernel.Get(type)
....然后我读了这个问题....假设 MyAssembly.dll 有一个 IMyType 的实现,你需要(在你的主程序集中): -
kernel.Load( "MyAssembly.dll")
在您动态加载的程序集中:-
public class Module : StandardModule
{
public override void Load()
{
Bind<IMyType>().To<MyType>();
}
}
并且不要忘记查看 MEF 是否是这里的答案,因为如果可以提供帮助,您不想编写大量显式插件管理和/或检测逻辑(但如果您只是在做简单的事情并且只是在Assembly.LoadFrom()
做问这个问题的目的,你可能仍然处于 Ninject 的最佳位置。
同上,如果你真的需要通过 解析接口Assembly.GetType()
,你可能应该使用类似的东西dynamic
来做你可能必须做的后期绑定(在你知道之前,你应该使用动态语言或托管脚本语言)