Внедрение фабрики в конструктор viewModels с помощью Unity - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть простая viewModel:

public class MainViewModel
{
    public MainViewModel(IViewModelFactory viewModelFactory)
    {
        //...here I need accesss to other viewModels
    }
}

Я решил добавить фабрику в конструктор, чтобы позже создать дочерние viewModel, однако в inte rnet много противоречивой информации о том, как использовать UnityContainer, шаблон антидокатора службы, et c. Это немного сбивает с толку. Во всяком случае, я пришел с этим примером кода:

public interface IViewModelFactory
{
    T Resolve<T>();
}
public class ViewModelFactory : IViewModelFactory
{
    public ViewModelFactory(IUnityContainer unityContainer)
    {
        _container = unityContainer;
    }
    private IUnityContainer _container { get; set; }

    public T Resolve<T>()
    {
        return (T)this._container.Resolve<T>();
    }
}

Здесь я создал фабрику сервисов, в которую я передаю UnityContainer. После этого я бы зарегистрировал его и внедрил в несколько viewModels, где это уместно. Я не сделал контейнер глобально доступным для всех, так что, похоже, я мог бы избежать этого, однако я хотел бы спросить, считается ли этот подход все еще шаблоном поиска служб (потому что я ссылался на контейнер) и поэтому должен избегать? Если нет, есть ли какие-нибудь рекомендации, которые можно было бы использовать, чтобы сделать это лучше или правильнее?

Спасибо.

...