我正在从外部程序集加载一个类型,并希望创建该类型的实例。但是,此类型/类是由当前由Ninject
管理/绑定的对象设置的构造函数注入。如何使用Ninject
创建此类型的实例并注入任何构造函数依赖项?
以下是我如何获得此类型。
Assembly myAssembly = Assembly.LoadFrom("MyAssembly.dll");
Type type = myAssembly.GetType("IMyType");
答案 0 :(得分:2)
假设您已创建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
的东西来做你可能不得不做的后期绑定(在你知道它之前)你应该使用动态语言或托管写作语言)