Чтобы объяснить, что происходит в первую очередь: параметр, которому вы передаете _accessors
, зарезервирован для объекта «options» для диалога. Это было бы что-то вроде настроек поведения Диалога. Например, в случае подсказок это всегда подкласс PromptOptions
. Эти объекты параметров сериализуются и сохраняются в стеке в течение времени жизни диалогового окна, поэтому причина, по которой вы получаете исключение, передающее _accessors
, состоит в том, что он содержит типы, которые не сериализуются. Итак, короче говоря, вы не хотите передавать свои средства доступа таким образом.
Средства доступа по сути являются одиночными, и вы хотели бы передать их через цепочку конструктора ваших диалогов. Таким образом, вы бы взяли IStatePropertyAccessor<T>
(или класс «accessors», если решили следовать этому шаблону) в свой конструктор SiteReviewDialog
, а затем удостоверились, что он передается в любые дочерние диалоги, которые он создает через их конструкторы. ПРИМЕЧАНИЕ: сами диалоги должны быть действительно созданы как одиночные.
Оттуда это просто вопрос использования аксессора, когда он вам нужен, потому что вы всегда даете ему ITurnContext
, из которого он должен загружать свои данные, а экземпляр singleton использует идентификаторы, специфичные для этого контекста, чтобы гарантировать правильность данных. загружен.