2
我是新來的依賴注入和團結,我想出了一個方法來調用所有我註冊的服務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();
}
}
}
它的工作原理,到目前爲止,但有一個最好的(更好的)實踐方法這樣做呢?
謝謝。
您正在解決兩次,如果服務被註冊爲瞬態(默認)會發生什麼? –
檢查這傢伙https://florincoros.wordpress.com/2015/02/17/extending-unity-container-for-idisposable-instances-2nd-approach/ –
好像你正在重新發明輪子兩種方法:方法1](http://thorarin.net/blog/post/2013/02/12/Unity-IoC-lifetime-management-IDisposable-part1.aspx),[方法2](https://florincoros.wordpress.com/2015/1月26日/延伸-團結容器換IDisposable的-實例-第一的方法/)。 – NightOwl888