.NET Core

时间:2016-12-11 19:53:01

标签: c# .net-core composition system.reflection mef2

我写了一些代码:

public interface IPlugin
{
    string Name { get; set; }
}

ClassLibrary1.dll

public class Class1 : IPlugin
{
    public string Name { get; set; } = "Hamed Fathi";
}

和控制台:

public static void Main(string[] args)
{
    var dir = @"PLUGIN DIRECTORY PATH";

    //Load Assemblies
    var files = Directory.EnumerateFiles(dir, "*.dll", SearchOption.TopDirectoryOnly);
    var assemblies = new List<Assembly>();
    foreach (var file in files)
        assemblies.Add(AssemblyLoadContext.Default.LoadFromAssemblyPath(file));

    //MEF2
    var conventions = new ConventionBuilder();
    conventions
        .ForTypesDerivedFrom<IPlugin>()
        .Export<IPlugin>()
        .Shared();
    var configuration = new ContainerConfiguration()
        .WithAssemblies(assemblies, conventions);
    var container = configuration.CreateContainer();
    var plugins = container.GetExports<IPlugin>().ToList();

    Console.ReadKey();
}

我想使用FileSystemWatcher来查看插件文件夹中的任何更改,以便我可以更改/删除/重命名/创建任何dll。

所以我有3个问题:

1。当我根据上面的代码加载程序集时,我无法更改/删除插件文件夹中的任何dll。 在.NET Framework中,我可以使用AppDomain和ShadowFolder来创建分离的上下文。

无论如何在MEF2加载时操纵dll?

enter image description here

2. 无论如何,MEF2是否重新加载/刷新/重新获取程序集?

3. 无论如何,我找到一对程序集的路径和GetExports()? 哪个导出类型存在于哪个程序集('s路径)中。

0 个答案:

没有答案