私は Microsoft Unity Container を初めて使用するので、私の質問は些細なことかもしれません。パラメーターなしのコンストラクターが 1 つしかないクラスのインスタンスを登録して解決する必要がありました。ここで、単純なコンストラクターを使用してクラスを登録および解決する方法を学びたいと思います。これが私のクラスです。
public class MyClass
{
private string a1;
public string A1
{
get { return a1; }
set { a1 = value; }
}
private int a2;
public int A2
{
get { return a2; }
set { a2 = value; }
}
public MyClass()
{ this.a1 = "aaaaa";
this.a2 = 1;
}
public MyClass(string a1,int a2)
{
this.a1 = a1;
this.a2 = a2;
}
}
MyClass() コンストラクターを登録して解決する必要があります。次に、2番目を登録しようとしました
//App.xaml.cs
container = new UnityContainer();
container.RegisterType<MainView>();
............
container.RegisterType<string>("A1");
container.RegisterType<int>("A2");
container.RegisterType<MyClass>("MyClassConstructor",new InjectionConstructor(new ResolvedParameter<string>("A1"),new ResolvedParameter<int>("A2")));
//NavigationService.cs, create an instance of MyClass("mystring",100) and bind it to a window
public Window ShowMainView()
{
var window = Container.Resolve<MainView>();
MyClass myClass = Container.Resolve<MyClass>("MyClassConstructor", new ParameterOverrides { { "A1", "mystring" }, { "A2", 100 } });
window.DataContext = myClass ;
window.Show();
return window;
}
コンテナーが MyClass インスタンスを作成しようとすると、次のエラーが発生しました。
依存関係の解決に失敗しました。タイプ = "MySolution.MyProject.ViewModels.MyClass"、名前 = "MyClassConstructor"。例外が発生しました: 解決中。
例外: InvalidOperationException - String 型を構築できません。この値を提供するようにコンテナーを構成する必要があります。
例外発生時のコンテナは次のとおりでした。
MySolution.MyProject.ViewModels.MyClass,MyClassConstructor の解決 コンストラクタ MySolution.MyProject.ViewModels.MyClass(System.String a1, System.Int32 a2) のパラメータ「a1」の解決 System.String,A1 の解決
それがどのように機能するかを理解するのを手伝ってください。ありがとう