我是依赖注入和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();
}
}
}
它到目前为止有效,但有没有最佳(更好)的练习方法呢?
感谢。
答案 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