使用 Ninject 和 wpf 从所有程序集中加载模块

Posted

技术标签:

【中文标题】使用 Ninject 和 wpf 从所有程序集中加载模块【英文标题】:Loading modules from all assemblies with Ninject and wpf 【发布时间】:2013-07-28 07:01:32 【问题描述】:

我使用这个article 并在项目中创建了多个类库。我想将所有模块加载到内核中。

为了加载所有模块,我在 MainViewModel 中使用了这段代码

public MainViewModel()

    IKernel kernel = new StandardKernel();
    kernel.Load(AppDomain.CurrentDomain.GetAssemblies());
    Plugins = kernel.GetAll<PluginBase>().ToList();

但不要在AppDomain.CurrentDomain.GetAssemblies() 中加载模块(插件)

【问题讨论】:

好的。还有什么问题? 不要加载我的模块。 【参考方案1】:

我使用此代码加载程序集。我找到了它there。

var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
var loadedPaths = loadedAssemblies.Select(a => a.Location).ToArray();

var referencedPaths = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll");
var toLoad = referencedPaths.Where(r => !loadedPaths.Contains(r, StringComparer.InvariantCultureIgnoreCase)).ToList();
toLoad.ForEach(path => loadedAssemblies.Add(AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(path))));

【讨论】:

以上是关于使用 Ninject 和 wpf 从所有程序集中加载模块的主要内容,如果未能解决你的问题,请参考以下文章

WPF:从当前程序集中动态加载图像

无法加载文件或程序集'Ninject 版本 4.0.0.0

Ninject之旅之九:Ninject上下文绑定(附程序下载)

WPF9 Binding-1

WPF9 Binding-1

从外部文件或程序集加载 WPF 样式或其他静态资源