处置所有注册服务?

时间:2016-03-08 16:15:57

标签: c# .net dependency-injection unity-container

我是依赖注入和Unity的新手,我想出了一种在所有注册服务上调用Dispose方法的方法。

这是我到目前为止所得到的。这是我的UnityResolver课程的一部分:

public class UnityResolver : IDependencyResolver
{
    protected IUnityContainer container;
    private List<object> serviceList = new List<object>();

    public object GetService(Type serviceType)
    {
        try
        {
            serviceList.Add(container.Resolve(serviceType));
            return container.Resolve(serviceType);
        }
        catch (ResolutionFailedException)
        {
            return null;
        }
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        try
        {
            container.ResolveAll(serviceType).ToList().ForEach(x => serviceList.Add(x));
            return container.ResolveAll(serviceType);
        }
        catch (ResolutionFailedException)
        {
            return new List<object>();
        }
    }

    public void Dispose()
    {
        container.Dispose();
        var disposables = serviceList.Where(x => x is IDisposable).ToList();

        foreach (IDisposable service in disposables)
        {
            service.Dispose();
        }       
     }
}

它到目前为止有效,但有没有最佳(更好)的练习方法呢?

感谢。

1 个答案:

答案 0 :(得分:1)

我认为可以解决您的问题是使用子容器。

var childContainer = container.CreateChildContainer();
// make use of the childContainer
// ..
childContainer.Dispose(); // this will dispose any (transient) services created in the lifetime of the Child Container
相关问题