StructureMap - Может ли состояние кэшируемого объекта проверяться в пользовательском цикле ILife? - PullRequest
2 голосов
/ 10 февраля 2011

Я добавляю пользовательский цикл 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; }
    }
}
...