2

私はこのコードを持っています:

public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);        

            var mainVM = new MainViewModel
            (
                new Service1(),
                ...
                new Service10(),
            );

            var window = new MainWindow();
            window.DataContext = mainVM;
            window.Show();

        }
    }

すべての Services インスタンスを MainViewModel に渡します。MainViewModel 内で、コンストラクター パラメーターの受け渡しを介して、これらのサービスを他の ViewModel に広げました。

App クラスのサービスに DI フレームワークを使用する必要がありますか?

はいの場合、インスタンスを手動で作成するだけでなく、サービスを解決する利点は何ですか?

4

1 に答える 1

1

これらすべての型をコンテナーに登録し、OnStartupメソッドで 1 回のResolve呼び出しを行うことができます。

まず、MainWindowコンストラクターでビュー モデルを受け入れます。

public MainWindow(MainViewModel viewModel)
{
    DataContext = viewModel;
}

次に、登録MainWindowMainViewModelて、サービスのすぐ横にあるコンテナーに入れます。他のビュー モデルが必要な場合MainViewModelは、それらをコンストラクターに入れて登録します。

最後に、MainWindowすべてのインスタンス化作業を実行する resolve :

var window = container.Resolve<MainWindow>();

window.Show();

ここで重要な点は、ビュー モデルは、コンテナーに登録する他のクラスと変わらないということです。

このアプローチの利点(コメントから):

1) コンテナーがすべてのコンストラクター呼び出しを行います。グラフの各部分を記述するだけで、組み立てるという面倒な作業が必要になります。

2)MainViewModel子のビュー モデルを構築する方法を知る必要がなくなります。これにより、子のすべての依存関係を知る必要がなくなり、コアの責任に集中できます。

于 2011-01-02T03:44:25.400 に答える