Разве контейнер IoC не должен обрабатывать сериализацию синглов бизнес-логики? - PullRequest
2 голосов
/ 16 января 2012

Приведенные ниже утверждения и следующий вопрос основаны на моем собственном опыте, и если некоторые из них неверны, вы можете указать на это.На самом деле, я был бы очень признателен.

Практически в любой архитектуре приложений разработчики используют экземпляры класса с разрешением контейнера IoC, которые InSingletonScope() (терминология взята из Ninject, но я уверен, что большинствополучить значение).

Примером экземпляра класса, который вам нужен только один, может быть, например, реализация ICloudStorageProvider.

Если экземпляр реализации ICloudStorageProvider содержит данные для входа в системув облачную учетную запись в форме вложенного класса LoginData или просто в полях «Логин» и «Пароль», так что до сих пор я вызывал метод, подобный LocalStorageProvider.SaveLoginData(...), всякий раз, когда мне нужно было его сохранить.Другой класс, который знал, как это сделать, сохранил данные для моего экземпляра класса.

Это сделало бы жизнь намного проще, если бы существовал механизм, позволяющий сериализовать в локальное хранилище данных целые экземпляры.таких «одноэлементных» объектов, а затем, когда приложение перезапускается или снова требуется isntance, оно просто десериализует его вместе с данными для входа в систему в приведенном выше примере.

А так как контейнер IoC являетсяодин ответственный за создание экземпляров объекта в наши дни выглядит как идеальное решение для такой ответственности.

Есть ли такой механизм, который действует как IoC и сериализатор?

1 Ответ

1 голос
/ 16 января 2012

Я не знаю, почему вы хотите сделать такую ​​вещь, но для меня это звучит так, как будто бы ее лучше всего смоделировать как пользовательский стиль жизни.По сути, это стиль жизни, который расширяет за пределы Singleton и охватывает несколько экземпляров контейнеров.

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

Можно ли написать пользовательское время жизни для Ninject, я не могу сказать, но пользовательские времена жизни поддерживаются в Castle Windsor , StructureMap и Unity .

Схожий вопрос - точно как вы бы сериализовали произвольный граф объектов?В .NET самый простой способ - использовать встроенный двоичный сериализатор, но для этого необходимо, чтобы все объекты в графе были аннотированы атрибутом [Serializable] или реализовали ISerializable.Есть и другие варианты, но для большинства из них требуется какой-то механизм подписки, поэтому строго ограничено, какие службы могут сериализоваться.

...