MEF - Возможно ли с каталогом каталогов получить последнюю скомпилированную DLL для того же кода? - PullRequest
1 голос
/ 07 ноября 2011

Допустим, у меня есть контракт

public interface IGreeting
{
    string SayHelloWorld();
}

И класс в другой dll

[Export(typeof(IGreeting))]
public class Greeting : IGreeting
{
    public string SayHelloWorld()
    {
        return "GREETING V1";
    }
}

Я использую каталог-каталог, чтобы получить эту DLL.У меня работает нормально.Когда я обновляю свой исходный код следующим образом:

[Export(typeof(IGreeting))]
public class Greeting : IGreeting
{
    public string SayHelloWorld()
    {
        return "GREETING V2";
    }
}

и помещаю эту новую DLL «Далее» в старую Greeting DLL, Mef не импортирует несколько различных классов Greeting, но выбирает 1 из 2 DLL и экспортирует 2 разатот же класс.

Итак, итоговый каталог выполнения выглядит следующим образом:

MyApp.exe
Greeting_V1.dll   
Greeting_V2.dll

Я хочу, чтобы приложение импортировало 2 класса Greeting с помощью ImportMany.Это дает мне 2 экземпляра из Greeting_V1.dll.Если я удаляю Greeting_V2.dll, он дает мне только 1 экземпляр Greeting_V1.dll.

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

Ну, мне кажется, что вы импортируете много экземпляров IGreeting, поэтому в этом смысле MEF делает именно то, что должен.Если вы хотите заменить экземпляр Greeting из сборки V1 на то, что находится в V2, удалите сборку V1, чтобы MEF мог загрузить только то, что доступно.

0 голосов
/ 29 марта 2012

Это не проблема MEF.Проблема в загрузочной модели .NET.(или лучше то, как вы загружаете объекты с помощью .net)

Когда MEF загружает, он возвращает правильные объекты.Но при поиске класса Greeting при загрузке V2 уже существует класс Greeting для V1 dll, загруженный с правильным классом, к которому относится имя Greeting для V2.И загрузчик dll, на который фактически ссылается V2, не загружается.

...