【发布时间】:2011-09-21 19:52:17
【问题描述】:
例子:
控制台应用程序:
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 来完成。
我遇到的问题是程序集“实施”被锁定。我无法替换它。
我必须做什么才能实现这一目标?
IoC 容器是否对我的需求负责,还是我必须构建自己的基础架构?
编辑:
在 Web 环境中,您可以轻松地替换程序集。我已经成功地做到了这一点。
【问题讨论】:
-
为什么是-1?感谢您不发表评论!
-
你能解释一下你试图通过在运行时替换一个程序集(或者是你想要替换的一组注册?)来解决的问题吗?
-
我希望在不关闭它的情况下更新我的应用程序。因此,即我想更新我的 DAL,因为有一个错误,但我的应用程序必须仍然运行。
-
我强烈建议不要做这样的事情。这几乎不会奏效,并且会出现各种各样的问题。请在 SO 上发布一个特定于这种更新方式的新问题,并询问这是否是一个好主意以及您会遇到什么问题。
-
@Steven 我开了一个新问题:stackoverflow.com/questions/7554342/…
标签: c# assemblies ioc-container structuremap appdomain