2

我正在从外部程序集中加载一个类型,并希望创建该类型的一个实例。但是,此类型/类是为当前由Ninject. 如何使用Ninject创建这种类型的实例并注入任何构造函数依赖项?

下面是我如何获得这种类型。

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

1 回答 1

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来做你可能必须做的后期绑定(在你知道之前,你应该使用动态语言或托管脚本语言)

于 2010-09-09T20:18:16.303 回答