Я пытаюсь понять, если мне нужно использовать .singleton() в моей структуре кода карты. вопрос об этом уже возник в stackoverflow (StructureMap singleton), но я хочу быть уверенным, что я определенно использую правильный синтаксис. Один из ответов следует, что если я возвращающий тип мне нужно использовать .singleton(), так что мой код здесь:Structuremap singleton use
x.For<IApprovedProgrammesHelper>().Use<ApprovedProgrammesHelper>();
x.For(typeof(ICache<>))
.Use(typeof(CacheHelper<>))
.Dependencies.Add(typeof(TimeSpan), Settings.Instance.HttpCacheExpiration);
должен выглядеть следующим образом:
x.For<IApprovedProgrammesHelper>().singleton().Use<ApprovedProgrammesHelper>();
x.For(typeof(ICache<>))
.Singleton()
.Use(typeof(CacheHelper<>))
.Dependencies.Add(typeof(TimeSpan), Settings.Instance.HttpCacheExpiration);
это правильно? Или я неправильно понял, как это должно работать? Я не совсем уверен, какие последствия для кода в любом случае. Вероятно, стоит упомянуть, что типы в операторе .Use <> не следуют шаблону singleton.
Спасибо за ваше время заранее Sam
Только вы знаете, является ли это безопасно иметь * только один экземпляр * 'CacheHelper' и 'ApprovedProgrammesHelper' или нет. Если он (или его зависимости) имеет какое-либо (изменяемое) состояние и не является потокобезопасным, то, вероятно, неразумно определять их как singleton. Никто не может ответить на этот вопрос для вас, не видя кода для обоих классов, их зависимостей и знания, в каком контексте (например, framework) этот код работает. –
Steven
@Steven, вы правы, мне потребовалось немного времени, чтобы понять, что его единственно реально можно сказать, подходит ли одноэлемент, если вы знаете детали соответствующих классов/интерфейсов. Ваше объяснение помогло осветить проблему для меня - использование singleton неверно или неверно, оно полностью зависит от контекста. Спасибо за вашу помощь. –