Загрузка сборки, создание типа и кэширование - PullRequest
2 голосов
/ 04 октября 2011

Я пытаюсь написать что-то вроде ObjectFactory, которое, учитывая путь к сборке и имя типа в этой сборке, возвращает экземпляр того же типа, используя Reflection. Поскольку мне нужно выполнять эти операции несколько раз для типов в нескольких разных сборках, я должен использовать Assembly.LoadFrom каждый раз, когда мне нужен новый экземпляр данного типа, или вместо этого я должен каким-то образом как-то кэшировать результирующий объект Assembly и делегата для типа метод создания?

Ответы [ 2 ]

3 голосов
/ 04 октября 2011

Нет, не нужно, если не по дизайнерским решениям. Вы можете хранить ссылку на сборку в памяти внутри некоторого объекта типа Assembly .

0 голосов
/ 04 октября 2011

Каждый раз звонить Assembly.LoadFrom будет медленным способом сделать это.

Я бы предложил, чтобы, если вы хотите пойти по пути создания собственных фабричных классов, вы делаете кеширование Type экземпляра для классов, которые вы активируете.

Еще лучше, я бы посоветовал взглянуть на структуру внедрения зависимостей. Если вы не знакомы с внедрением зависимости (DI), см. http://en.wikipedia.org/wiki/Dependency_injection.

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

Если вы намеренно проходите процесс создания фабрики объектов, я бы посоветовал вам в любом случае взглянуть на эти реализации с открытым исходным кодом, поскольку они являются отличными примерами того, как DI работает хорошо.

...