我有一个通过BLE连接到硬件设备的应用程序。有几种设备的功能稍有不同,在用户选择要连接的设备后,我想注册一个设备实例。此实例稍后将被许多其他模型使用。但是,我无法在我的视图模型中访问Unity容器,因此我不确定执行此操作的正确方法。
答案 0 :(得分:1)
由于您不想或不需要将应用程序绑定到特定容器,因此您不想与合成根目录之外的容器手动交互。
根据您的情况,仅针对此用例创建特定于应用程序的迷你容器:
./file.exe
您可以通过将活动设备的设置分开并将活动设备读入两个接口和/或将setter-interface的可见性限制为某些模块来增强此功能,但是在不访问甚至没有容器的情况下,它仍然可以正常工作(您不需要还是不要在测试中使用该容器,对吗?)
要真正创建设备,您也不需要容器,因为统一可以注入例如public interface IDevice
{
void DoStuff();
}
public interface IDeviceProvider
{
IDevice ActiveDevice { get; set }
}
internal DeviceProvider : IServiceProvider
{
public IDevice ActiveDevice { get; set; }
}
internal class Consumer
{
public Consumer( IDeviceProvider deviceProvider )
{
_deviceProvider = deviceProvider;
}
public void UseDevice()
{
_deviceProvider.ActiveDevice?.DoStuff()??throw new Exception("No device connected");
}
private readonly IDeviceProvider _deviceProvider;
}
在需要时创建Func<DeviceA>
实例。