我是Microsoft Unity Container的新手,所以我的问题可能微不足道。 我必须注册并解决只有一个无参数构造函数的类的实例。现在我想学习如何使用简单的构造函数注册和解析类。这是我的班级。
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()构造函数;然后,我试着注册第二个
//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实例时,我收到此错误:
依赖项的解析失败,type =“MySolution.MyProject.ViewModels.MyClass”,name =“MyClassConstructor”。 在解决时发生异常。
在例外时,容器是:
解析MySolution.MyProject.ViewModels.MyClass,MyClassConstructor 解析构造函数MySolution.MyProject.ViewModels.MyClass(System.String a1,System.Int32 a2)的参数“a1” 解析System.String,A1
请帮助我理解它是如何工作的。感谢答案 0 :(得分:1)
你在注册方面做得太多了 更重要的是,您需要指定构造函数参数名称(小写),而不是属性名称(大写)。
以下是它的外观:
[TestMethod]
public void Should_Be_Able_To_Pass_Parameters_To_Ctor()
{
var container = new UnityContainer();
container.RegisterType<MyClass>();
var myClass = container.Resolve<MyClass>(
new ParameterOverrides { { "a1", "mystring" }, { "a2", 100 } });
Assert.IsNotNull(myClass);
Assert.AreEqual("mystring", myClass.A1);
Assert.AreEqual(100, myClass.A2);
}
答案 1 :(得分:0)
试试这个
int start_at = 1;
container.Register(
Component.For<IMyComponent>().DependsOn(dependency: Dependency.OnValue<int>(start_at))
);