Я добавляю пользовательский цикл StructureMap ILifecycle с семантикой, аналогичной циклу SingletonLifecycle, но с предикатом, который должен встречаться для возврата существующего экземпляра.
Идея состоит в том, что пользовательский класс жизненного цикла будет приниматьпредикат в качестве параметра конструктора, и если предикат не встречается, будет возвращен новый пустой кэш.До сих пор я основывал код на существующем цикле SingletonLifecycle, но не вижу способа проверить состояние кэшированной сущности.
- Возможно ли изнутри ILifecycle извлечь и проверить кэшированную сущность?
- Люди StructureMap - это даже правильный подход?
Код пока выглядит следующим образом:
public class PredicatedLifecycle<T> : ILifecycle
{
public PredicatedLifecycle(Predicate<T> predicate)
{
Predicate = predicate;
}
private Predicate<T> Predicate { get; set; }
private readonly MainObjectCache _cache = new MainObjectCache();
public void EjectAll()
{
_cache.DisposeAndClear();
}
public IObjectCache FindCache()
{
// TODO : Inspect the cache for an instance of T
// if it exists retrieve from the cache and invoke
// the predicate against it
// replace the cache if predicate returns false
return _cache;
}
public string Scope
{
get { return GetType().Name; }
}
}