从视图模型统一注册对象的实例

时间:2018-12-25 23:34:11

标签: .net unity-container prism

我有一个通过BLE连接到硬件设备的应用程序。有几种设备的功能稍有不同,在用户选择要连接的设备后,我想注册一个设备实例。此实例稍后将被许多其他模型使用。但是,我无法在我的视图模型中访问Unity容器,因此我不确定执行此操作的正确方法。

1 个答案:

答案 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>实例。