3
は、私は複数のリポジトリのための1 Dbcontextを持っている私のDbConntextObjDbContext UnityがHttpContextLifetimeManager.RemoveValue()を呼び出しません。
_container.RegisterType<IDbConntextObj, DbConntextObj>(new HttpContextLifetimeManager<DbConntextObj>());
Unityがlifetimemanager
でたremoveValue()を呼び出していない定義しています。
私lifetimemanagerは、次のようになります。
DbContextのDisposeが呼び出されていないことをpublic class HttpContextLifetimeManager<T> : LifetimeManager, IDisposable
{
private readonly string _itemName = typeof(T).AssemblyQualifiedName;
public override object GetValue()
{
return HttpContext.Current.Items[_itemName];
}
public override void RemoveValue()
{
var disposable = GetValue() as IDisposable;
HttpContext.Current.Items.Remove(_itemName);
if (disposable != null)
disposable.Dispose();
}
public override void SetValue(object newValue)
{
HttpContext.Current.Items[_itemName] = newValue;
}
public void Dispose()
{
RemoveValue();
}
}
それは悪いことですか? 回避策はありますか?UnityとMVC3については?