StructureMap - Возможность замены сборки во время выполнения - PullRequest
0 голосов
/ 21 сентября 2011

Пример:

Консольное приложение:

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, который просто заменит старую сборку «Реализация».

У меня проблема в том, что сборка «Реализация» заблокирована.Я не могу заменить его.

Что мне нужно сделать, чтобы достичь этого?

Контейнер IoC отвечает за мои требования или я должен построить свою собственную инфраструктуру?

РЕДАКТИРОВАТЬ:

В веб-среде вы можете легко заменить сборку.Я сделал это уже с успехом.

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Боюсь, вы можете загрузить только дополнительную сборку.

С MSDN :

Невозможно выгрузить отдельную сборку, не выгружая все домены приложений, которые ее содержат.Даже если сборка выходит из области видимости, фактический файл сборки остается загруженным до тех пор, пока не будут выгружены все домены приложения, которые его содержат.

0 голосов
/ 21 сентября 2011

Я думаю, это то, что вы ищете:

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

...