Как решить проблему сборки Assembly.Load? - PullRequest
2 голосов
/ 19 января 2010

Я рефакторинг некоторого кода, и я столкнулся с дилеммой.

Допустим, у нас есть следующий сценарий:

  1. Базовая сборка, которая содержит много общих интерфейсов и классов
  2. Библиотечная сборка, которая содержит более специализированные классы.

Библиотечная сборка ссылается на базовую сборку. Пока все хорошо.

В связи с тем, что я выполняю этот рефакторинг, необходимо, чтобы Базовая сборка создавала объекты, которые объявлены в Библиотечной сборке.

ОК, чтобы избежать проблемы с циклической ссылкой, я решил загрузить библиотечную сборку, когда это необходимо (и это нужно только в очень конкретной точке при инициализации типа).

Тем не менее, производительность погрузки всего этого упала до темной пропасти ...

Кто-нибудь знает, как решить эту проблему?


Отредактировано для добавления

Некоторые люди просили код, который я использую для загрузки ... Это действительно тривиально.

/*
 * Load the Library Assembly
 */
Assembly asm = Assembly.Load("Library, PublicKeyToken=...");

/*
 * Get desired type
 */
Type   t = asm.GetType("Library.DesiredType")

/*
 * Get the default constructor
 */
var ctor = type.GetConstructor(new Type[] {})

1 Ответ

5 голосов
/ 19 января 2010

Сборка должна быть загружена только один раз в домен приложений. Повторные вызовы для загрузки сборки X должны вернуть уже загруженную сборку. Можете ли вы опубликовать код того, как вы пытаетесь это сделать? Как вы измеряете "производительность"? Профилировали ли вы ваше приложение, чтобы проверить, действительно ли снижение производительности происходит при загрузке сборки?

...