gpt4 book ai didi

c# - MEF 导入未按预期工作

转载 作者:行者123 更新时间:2023-11-30 12:43:40 25 4
gpt4 key购买 nike

我有两个导出类:

[Export(typeof(Mod))]
public class CoreMod : Mod
{
[ImportingConstructor]
public CoreMod()
{
//here goes my constructor
}
}

[Export(typeof(Mod))]
public class AnotherMod : Mod
{
[ImportingConstructor]
public AnotherMod()
{
//here goes my constructor
}
}

CoreMod 在我的主程序集中,AnotherMod 在外部程序集中。 Mod 位于另一个程序集中,它们都在引用该程序集。
在我的应用程序中,我有一个类试图通过 MEF 加载模组:

class ModManager
{
[ImportMany(typeof(Mod))]
public static IEnumerable<Mod> Mods { get; set; }

public List<Mod> LoadedMods { get; set; }

public ModManager()
{
AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(CoreMod).Assembly));
catalog.Catalogs.Add(new DirectoryCatalog(
Path.GetDirectoryName(
new Uri(Assembly.GetExecutingAssembly()
.CodeBase).LocalPath)));

var container = new CompositionContainer(catalog);
container.ComposeParts(this);

LoadedMods = Mods.ToList();
}
}

在我看来应该满足所有导入,但它仍然无法导入任何内容(Mods 为空)。我做错了什么?

最佳答案

我认为发生的情况是您将 CompositionContainer 作为函数变量而不是类变量。此外,MEF 不支持导入到静态变量。尝试使用这个:

class ModManager
{
[ImportMany(typeof(Mod))]
public IEnumerable<Mod> Mods { get; set; }

public List<Mod> LoadedMods { get; set; }
CompositionContainer _container;

public ModManager()
{
AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(CoreMod).Assembly));
catalog.Catalogs.Add(new DirectoryCatalog(
Path.GetDirectoryName(
new Uri(Assembly.GetExecutingAssembly()
.CodeBase).LocalPath)));

_container = new CompositionContainer(catalog);
this._container.ComposeParts(this);

this.LoadedMods = this.Mods.ToList();
}
}

关于c# - MEF 导入未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30669648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com