我正在编写一个服务,该服务告诉实现接口IDeviceFinder
的多个类去查找连接的设备,该设备会将这些设备放入缓存中供其他对象使用。
控制器脚本如下:
private Container _container;
public bool Start()
{
_container.Collection.Register<IDeviceFinder>(
new Assembly[] { Assembly.GetExecutingAssembly() });
_container.Register<IDeviceCache, DeviceCache>(Lifestyle.Singleton);
_container.Register<IDeviceService, DeviceService>();
_container.Verify();
}
使用简单注入器,将设备查找器传递到构造函数中的DeviceService
。当发现者找到设备时,他们会通过委托将其报告回服务。然后,服务继续将其放入设备缓存(单例)。
设备服务本身实现接口IDisposable
。使用Dispose
,该服务将从设备查找器的代表退订。
public class DeviceService : IDeviceService //IDeviceService inherits from IDisposable
{
private IDeviceCache _cache;
private List<IDeviceFinder> _finders = new List<IDeviceFinder>();
public DeviceService(IDeviceCache cache, IDeviceFinder[] finders)
{
this._cache = cache;
this._finders = finders.ToList();
foreach (var finder in this._finders)
{
finder.DeviceFound += AddDeviceToCache;
}
}
public void Dispose()
{
foreach (var finder in this._finders)
{
finder.DeviceFound -= AddDeviceToCache;
}
}
private void AddDeviceToCache(Device device)
{
//...
}
}
但是,简单注入器给我一个警告,瞬态DeviceService
无法实现IDisposable
。
当我将生活方式更改为作用域时,我会收到一条警告,指出生活方式不匹配,因为DeviceService
(异步作用域)取决于IDeviceFinder[]
(瞬态)。
如何解决此错误?我真的不想摆脱IDisposable
界面。