1

Caliburn.Micro と Autofac を同時に学習中です。これら 2 つのテクノロジを適切に使用する方法を独学で学べるように、簡単なアプリを作成しています。

どこかに到達したと思うたびに、ルートビューモデルのデータを初期化する方法にいつもつまずきます。このビューモデルには、注入された「カテゴリ」ビューモデルのリストが必要です。この「カテゴリ」ビューモデルのリストは、アプリの初期化中に読み込まれます。

では、ルートの "Navigator" ビューモデルを autofac に登録し、新しいインスタンスの作成時にビューモデルにデータを挿入する必要があることを autofac に通知するにはどうすればよいですか?

caliburn と autofac がなければ、独自のスタートアップ メソッドを作成し、データをロードして、viewmodel に挿入するだけです。caliburn を使用して、ブートストラップで configure メソッドをオーバーライドしようとしています。これは、クラスを ioc コンテナーに登録する必要がある場所だからです。

私のルートビューモデル:

public class NavigatorViewModel : Conductor<IScreen>.Collection.OneActive
{
    public NavigatorViewModel(IEnumerable<CategoryViewModel> categories)
    {
        AddCategories(categories);
    }

    public void AddCategories(IEnumerable<CategoryViewModel> categories)
    {
        foreach (var category in categories)
        {
            if (Items.Contains(category))
                continue;
            Items.Add(category);
        }
        SetActiveItem();
    }

    private void SetActiveItem()
    {
        if (Items.Count < 1)
            return;
        ActiveItem = Items[0];
    }
}

ビューモデルをAutofacに登録する方法は次のとおりです。

protected override void Configure()
{
    var builder = new ContainerBuilder();

    builder.RegisterType<CategoryViewModel>().AsSelf();
    builder.RegisterType<NavigatorViewModel>().AsSelf();
    ...
    container = builder.Build();
}

NavigatorViewModel を登録するときに、CategoryViewModels のリストも注入する必要があることを autofac に伝えるにはどうすればよいですか?

caliburn ブートストラッパー内にデータをロードすると推測していますが、この時点ですべてを接続する方法がわかりません。

4

1 に答える 1

0

これは、MVVM や Caliburn.Micro ではなく AutoFac に関する質問のように見えますが、とにかく、AutoFac がシーケンスの自動配線 (IEnumberable) を自動的にサポートしていることを知っている限り、ナビゲーターを解決しようとすると、自動的にリストがいっぱいになるはずです。 、ただし、データの読み込みにカスタム作業を提供する必要がある場合は、次のように実行できます。

builder.RegisterType<NavigatorViewModel>()
.AsSelf()
.WithParameter(
(p, c) => true, 
(p, c) => new[] 
{ 
// Load your CategoryViewModels here or any other data that you would like
});

メソッドのAutoFacドキュメントを確認できますWithParameter

于 2013-03-04T01:42:21.720 に答える