2
在我的Rails應用程序中,我決定使用singleton創建某種工廠來正確獲取對象。開發重新加載後,Rails singleton變空了
配置/初始化/ registry.rb:
registry = Registry.instance
registry.define_lazy :period_predictor do
PeriodPredictor.new(NotificationBuilder.new, 28, 4, 3)
end
registry.define_lazy :notification_sender do
NotificationSender.new
end
的lib/registry.rb:
# Registry class which is singleton and stores values.
class Registry
include Singleton
# Define simple value. Like a constant.
#
# @param key [Symbol]
# @param value
def define(key, value)
container[key] = value
end
# Define value (block required) which will be calculated when it will be need.
# It will calculate it every time when it will be needed.
#
# @param key [Symbol]
# @param block [Proc]
def define_lazy(key, &block)
container[key] = LazyValue.new(&block)
end
# Get value.
#
# @param key [Symbol]
#
# @return
def get(key)
value = container[key]
if value.is_a?(LazyValue)
value = value.call
end
value
end
# Get value (hash access).
#
# @param key [Symbol]
#
# @return
def [](key)
get(key)
end
# Export all the values.
# Replacing values of returned hash won't change registry.
#
# @return [Hash]
def export
container.clone
end
# Import hash data to registry
#
# @param data [Hash]
def import(data)
data.each do |key, value|
@container[key] = value
end
end
private
# Get container.
#
# @return [Hash]
def container
@container ||= {}
end
# Class to store lazy value.
class LazyValue
def initialize(&block)
@block = block
end
def call
@block.call
end
end
end
一切工作正常生產。但是當我改變某些東西(甚至在某處添加空間)時,我無法從控制器中獲取單身人士的數據。
Registry.instance成爲註冊表的只是新鮮的實例,並 Registry.instance [:period_predictor]成爲零
同樣的事情發生時,我剛剛離開與單,使類方法。
只有當我關掉單身創建一個常量它沒有做這件事情:
registry = Registry.new
registry.define_lazy :period_predictor do
PeriodPredictor.new(NotificationBuilder.new, 28, 4, 3)
end
registry.define_lazy :notification_sender do
NotificationSender.new
end
REGISTRY = registry
的Rails版本4.2.5.1
難道有人有爲什麼發生這種情況的任何想法?