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

时间:2011-09-21 19:52:18

标签: c# assemblies ioc-container structuremap appdomain

示例:

控制台应用程序:

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;
    }
}

装配“解析器”

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

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

我遇到的问题是程序集“实现”已被锁定。我无法取代它。

我需要做些什么来实现这个目标?

IoC容器是否对我的要求负责,还是我必须构建自己的基础架构?

修改

在Web环境中,您可以轻松更换装配体。我已经成功地做到了这一点。

2 个答案:

答案 0 :(得分:2)

我担心你只能加载一个额外的组件。

来自MSDN

  

如果不卸载所有组件,则无法卸载单个组件   包含它的应用程序域。即使大会去了   超出范围,实际的程序集文件将保持加载直到所有   包含它的应用程序域已卸载。

答案 1 :(得分:0)