StructureMap-能够在运行时替换程序集

本文关键字:替换 程序集 运行时 StructureMap- | 更新日期: 2023-09-27 18:09:22

示例:

控制台应用程序:

class Program
{
    static void Main(string[] args)
    {
        var calculator = ObjectFactory.GetInstance<ICalculator>();
        for (var i = 0; i < 10; i++)
        {
            Console.WriteLine(calculator.Calculate(10, 5));
            Console.ReadLine();
        }
        Console.ReadLine();
    }
}

装配"接口":

public interface ICalculator
{
    int Calculate(int a, int b);
}

装配"实施":

internal class Calculator : ICalculator
{
    public int Calculate(int a, int b)
    {
        return a + b;
    }
}

程序集"实施",该程序集应在运行时替换上述程序集:

internal class Calculator : ICalculator
{
    public int Calculate(int a, int b)
    {
        return a * b;
    }
}

装配"Resolver">

For<ICalculator>().Use<Calculator>();

我想在运行时替换具体的实现。这可以通过UpdateService来完成,它只替换旧的程序集"Implementation"。

我遇到的问题是程序集"实现"被锁定。我无法替换它。

我必须做些什么才能做到这一点?

IoC容器对我的需求负责吗?还是我必须构建自己的基础设施?

编辑:

在web环境中,可以轻松地替换部件。我已经成功地做到了。

StructureMap-能够在运行时替换程序集

恐怕您只能加载一个额外的程序集。

来自MSDN:

如果不卸载所有程序集,就无法卸载单个程序集包含它的应用程序域的。即使程序集超出范围,实际的程序集文件将保持加载状态,直到所有包含它的应用程序域将被卸载。

我想这就是你想要的:

http://structuremap.net/structuremap/ChangingConfigurationAtRuntime.htm