如何在外部程序集中的类型的构造函数注入中使用Ninject

时间:2010-09-09 03:06:09

标签: assemblies ninject constructor-injection

我正在从外部程序集加载一个类型,并希望创建该类型的实例。但是,此类型/类是由当前由Ninject管理/绑定的对象设置的构造函数注入。如何使用Ninject创建此类型的实例并注入任何构造函数依赖项?

以下是我如何获得此类型。

Assembly myAssembly = Assembly.LoadFrom("MyAssembly.dll");
Type type = myAssembly.GetType("IMyType");

1 个答案:

答案 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的东西来做你可能不得不做的后期绑定(在你知道它之前)你应该使用动态语言或托管写作语言)