Подкачка во время выполнения из сборки, на которую ссылаются статически во время компиляции - PullRequest
2 голосов
/ 10 декабря 2010

При каких условиях я могу поменять сборку, на которую статически ссылаются во время компиляции, на другую, которая будет использоваться во время выполнения? Например:

Сборка приложения:

  • Ссылки Общее собрание
  • Ссылки ServiceProviderFactory в Сервисной сборке

Общее собрание:

  • Определяет IServiceProvider

Сервисная сборка:

  • Обеспечивает ServiceProviderFactory (заводская установка для IServiceProvider с)
  • Ссылки Общее собрание

Учитывая вышесказанное, я хотел бы иметь возможность поменять сборку Service во время установки, но я не знаю, при каких условиях новая сборка Service будет продолжать загружаться.

Я полагаю, что должно иметь место следующее:

  1. То же имя сборки,
  2. сборка со слабым именем или такой же номер версии в сборке со строгим именем и
  3. ServiceProviderFactory подпись остается постоянной.

Примечание: кажется, что лучше использовать рефлексию и искать в сервисной сборке реализацию IServiceProvider, чем полагаться на некоторую ServiceProviderFactory с присутствующей фиксированной подписью, но я все еще заинтересован в ответе на вышеизложенное.

1 Ответ

1 голос
/ 10 декабря 2010

Если это строгое имя, то вы не сможете использовать перенаправление сборки для чего-либо, кроме различий в версиях. Однако вы можете использовать событие AppDomain.AssemblyResolve для предоставления сборки в ответ на ошибку привязки запрошенной сборки.

Я на самом деле пробовал это как подтверждение концепции, когда пытался поддерживать сборки .NET 2.0, которые ссылались на сборку MEF CodePlex в приложении .NET 4, которая ссылалась на выпущенную сборку MEF. Вот ссылка на мой вопрос , на который кто-то ответил этой злой уловкой.

Тем не менее, это все очень сложно, и я не чувствую себя комфортно, делая это в реальном приложении. Можете ли вы извлечь свои интерфейсы в отдельную сборку, а затем использовать какое-то внедрение зависимости, такое как MEF или Unity, для динамической загрузки типов, реализующих эти интерфейсы?

...