0

我有一个 ViewManager 用来管理我的视图。它被放置在 App.View 命名空间中,并实现了一个 IViewManager 接口,放置在 App.ViewModel 库中。

问题是这个类被许多 ViewModels 使用,因为它们中的许多需要显示另一个 View。所以我需要在许多 ViewModel 中对 ViewManager 进行 ctor-inject,但其中一些需要创建一个工厂,所以我的问题是:

  • 这是一个正常问题还是我在某些方面错了?
  • 新的 ViewModel 应该从 ShellViewModel ex: var newVM = ViewModelFactory.Create(this.ViewManager, ...) (其中“this”是 ShellViewModel)还是从工厂接收 ViewManager?例如:(var newVM = ViewModelFactory.Create(...) 这意味着 ViewManager 是由容器注入到工厂的)?

感谢大家的帮助!

编辑

namespace BM.ViewModel
{
    public interface IViewManager
    {
        void Register<TViewInterface, TViewImplementation>(bool reset = false)
            where TViewInterface : IView
            where TViewImplementation : TViewInterface;

        void Unregister<TView>()
            where TView : IView;

        void UnregisterAll();

        TView GetView<TView>(BaseViewModel viewModel)
            where TView : IView;

        IEnumerable<IView> GetViews(BaseViewModel viewModel);

        IEnumerable<IView> GetAllViews();

        void CloseViews<TView>()
            where TView : IView;

        void CloseViews(BaseViewModel viewModel);


        void CloseAllViews();
    }
}
4

1 回答 1

1

一切似乎都很好,您正在注入依赖项并使用工厂,这些都是很好的做法。

关于ViewManager实例,如果 ViewManager 是单例的 - 如何访问它并不重要 - 使用工厂或任何其他对 ViewManager 的引用必须返回相同的实例。而且我不明白为什么要保留许多 ViewManager 实例,但这取决于您的特定应用程序设计。因此,请分享IViewManager接口声明并为每个方法提供一些注释,以便清楚是否IViewManager应该是单例。

需要关注的几点

  • ViewManager无国籍的吗?
  • 是否有任何功能要求 ViewManager 保留对所有 View 实例的引用?
于 2013-07-02T12:47:42.427 回答