Unity регистрирует экземпляр объекта из модели представления - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть приложение, которое подключается к аппаратному устройству через BLE.Есть несколько устройств, которые имеют немного разные возможности, и я хотел бы зарегистрировать экземпляр устройства после того, как пользователь выберет его для подключения.Этот экземпляр будет использоваться многими другими моделями позже.Однако у меня нет доступа к контейнеру Unity в моей модели представления, поэтому я не уверен в правильном способе сделать это.

1 Ответ

0 голосов
/ 26 декабря 2018

Вы не хотите вручную взаимодействовать с контейнером вне корневого каталога композиции, поскольку не хотите или не хотите связывать свое приложение с конкретным контейнером.

В вашей ситуации вы создаете приложение, специфичное для конкретного приложения.мини-контейнер только для этого варианта использования:

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> для создания DeviceA экземпляров, когда это необходимо.

...