// Copyright Orfeo Da Viá 2014. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) module endovena.reuse; import endovena.provider; interface Reuse { Object get(string key, Provider provider); } class Transient: Reuse { Object get(string key, Provider provider) { return provider.get; } } class Singleton: Reuse { private Object[string] instances; Object get(string key, Provider provider) { if(key !in this.instances) { this.instances[key] = provider.get; } return this.instances[key]; } }