0

我已经实现了自定义生命周期提供程序,以便在 hangfire 中为每个作业提供单例 DB 上下文。下面代码中的问题是创建的实例没有被释放。

我的问题是:为什么ReleaseObject不调用方法?

public class JobContextLifetimeProvider : TinyIoCContainer.ITinyIoCObjectLifetimeProvider
    {
        private static readonly ConcurrentDictionary<string, object> Locator = new ConcurrentDictionary<string, object>();

        public object GetObject()
        {
            var key = JobContext.JobId;
            return Locator.ContainsKey(key) ? Locator[key] : null;
        }

        public void SetObject(object value)
        {
            var key = JobContext.JobId;
            Locator[key] = value;

            if (value is IDataContext)
            {
                Debug.WriteLine("Created data context {0}", value.GetHashCode());
            }
        }

        public void ReleaseObject()
        {
            var item = GetObject() as IDisposable;

            if (item != null)
            {
                item.Dispose();
                SetObject(null);
            }
        }
    }
4

0 回答 0