あなたのviewmodelsのそれぞれのためのインタフェースを定義し、それに応じて登録します。あなたのコンストラクタで
public interface IViewModel
{
List<IUser> Users { get; }
}
public class ViewModel : IViewModel
{
List<IUser> Users { get; }
}
Container.RegisterType<IViewModel, ViewModel>();
インターフェイスタイプは、それが解決可能であるため、ユニティなどの具体的なタイプは確かにコンクリートの型のインスタンスを構築します、いない注入されていることを確認してください。インターフェイスはN個の実装を持つことができます。また
、あなたのコードは、アプリケーション全体に存在する必要のあるデータは、サービスではなく、ViewModelにを形成してくる必要があることで構築されなければなりません。 ViewModelをシングルトンにすることは、あなたのアプローチではなく、サービスを通じてデータをプロキシすることです。この方法でViewModelを自由に構築/破棄することができます。永続化したいデータは他の場所に存在します。迅速な対応のための
Container.RegisterType<IService, Service>(new ContainerControlledLifetimeManager());
Container.RegisterType<IViewModel, ViewModel>();
...
public List<IUser> Users
{
get { return Container.Resolve<IService>().GetUsers(); }
}
感謝。私は、データ・コンテキストを提供するビューに結びついているので、ポイントを見ることができないので、私は一般的にビュー・モデル用のインタフェースの作成には悩まされませんでした。私はこれについていくつかの長所と短所を見たことがありますが、私にとってはその過度のことです。おそらく私はこれを考え直す必要があるでしょう。したがって、設定オプションはありませんか? – pilsdumps
指定したタイプを登録すると、一時的な存続期間になります。 'ContainerControlledLifetimeManager'を使うことは確かにシングルトンの動作を提供しますが、通常はViewModelでそれをやりたいとは思わないでしょう。 ViewModelは複数のビューで使用できます。さらに、テストやその他の手段のための具体的なタイプをかなり簡単に交換することができます。コンクリート型のインスタンスを作成するUnityは、私が気づいているものは設定できません。コンテナの動作です。シングルトンの例がうまくいけば、あなたの例を理解するためのコードが必要になります。 –
Container.Resolve()はひどい習慣です! サービスを通じてデータをプロキシすることは優れたアドバイスです! –
aateeque