Ленивая инициализация для объектов, которые инициализируются отражением

У меня есть собственный атрибут [Finder] для полей и свойств, и у меня есть своего рода фабрика, которая инициализирует все поля и свойства так, как я хочу. Вопрос: Я хочу сделать ленивую инициализацию (объект создается только при вызове некоторых методов этого объекта) для объектов, которые я инициализирую. Примечание: свойства и поля могут быть разных типов.


person Powerslave    schedule 20.07.2011    source источник
comment
Что ваша фабрика делает с атрибутом Finder?   -  person Daniel Hilgarth    schedule 20.07.2011
comment
он просто извлекает из него 2 поля (селекторы), которые помогают найти html-элементы на веб-странице.   -  person Powerslave    schedule 20.07.2011


Ответы (2)


В зависимости от того, как происходит инициализация, вы можете использовать новый тип Lazy<T>. Другой возможностью было бы вернуть автоматически созданный подкласс вашего класса — прокси — который проверяет состояние инициализации при каждом вызове метода и при необходимости выполняет инициализацию.

person Daniel Hilgarth    schedule 20.07.2011
comment
Ленивый, кто не делает работу, можете ли вы предложить какую-нибудь библиотеку, которая создаст прокси для меня? - person Powerslave; 20.07.2011
comment
извините, но вы можете предложить что-то еще, потому что замок не соответствует моим потребностям и - person Powerslave; 27.07.2011
comment
Проблема решена, но проблема заключалась в том, что мне нужно было создать прокси для класса, у которого есть не виртуальные методы, которые нужно было перехватить! - person Powerslave; 29.07.2011

Вы можете использовать System.Lazy‹T>. В противном случае вам придется реализовать логику, чтобы отслеживать, какие свойства/поля были инициализированы самостоятельно.

person George Duckett    schedule 20.07.2011