由於約書亞者之一自己ILifecycle,一種選擇,我把你的建議。這是我完成的解決方案,這似乎工作正常。任何反饋讚賞。
public class TenantLifecycle : ILifecycle
{
private readonly ConcurrentDictionary<string, MainObjectCache> _tenantCaches =
new ConcurrentDictionary<string, MainObjectCache>();
public IObjectCache FindCache()
{
var cache = _tenantCaches.GetOrAdd(TenantKey, new MainObjectCache());
return cache;
}
public void EjectAll()
{
FindCache().DisposeAndClear();
}
public string Scope
{
get { return "Tenant"; }
}
protected virtual string TenantKey
{
get
{
var requestHost = HttpContext.Current.Request.Url.Host;
var normalisedRequestHost = requestHost.ToLowerInvariant();
return normalisedRequestHost;
}
}
}
隨着StructureMap配置:
ObjectFactory.Initialize(
x => x.For<ISiteSettings>()
.LifecycleIs(new TenantLifecycle())
.Use<SiteSettings>()
);
利用這個地方的租約從查詢字符串確定一個變體,工程巨大。 – 2011-02-15 10:07:43
爲什麼_tenantCaches在這個實現中不是靜態的?如果我在不同的「For」映射中調用新的TenantLifecycle(),我會得到新的對象緩存? – 2012-01-19 12:01:27