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环境中,可以轻松地替换部件。我已经成功地做到了。
恐怕您只能加载一个额外的程序集。
来自MSDN:
如果不卸载所有程序集,就无法卸载单个程序集包含它的应用程序域的。即使程序集超出范围,实际的程序集文件将保持加载状态,直到所有包含它的应用程序域将被卸载。
我想这就是你想要的:
http://structuremap.net/structuremap/ChangingConfigurationAtRuntime.htm