Mini 容器学习笔记6——组件的获取(应用)
1. 通过组件Id获取组件实例:
[Test] public void GetByIdTest() { ServiceRegistry.Register<Person>("person"); var person = ServiceLocator.Get<IPerson>("person"); Assert.IsTrue(person != null); var person2 = ServiceLocator.Get<Person>("person"); Assert.IsTrue(person2 != null); Assert.AreSame(person, person2); Assert.IsTrue(Person.HasVisited); }
[Test] public void GetByTypeTest() { ServiceRegistry.Register<Person>(); var person = ServiceLocator.Get<IPerson>(); Assert.IsTrue(person != null); var person2 = ServiceLocator.Get<IPerson,Person>(); Assert.IsTrue(person2 != null); Assert.AreSame(person, person2); Assert.IsTrue(Person.HasVisited); }
[Contract] interface IPerson { string Name { get; set; } } class Person : IPerson { public string Name { get; set; } public static bool HasVisited; public Person() { HasVisited = true; } } [Contract] interface IHorse { } [Component] class RedHorse : IHorse { } class BlackHorse : IHorse { } class Person2 : IPerson { public string Name { get; set; } public IHorse Horse { get; set; } public Person2(IHorse horse) { Horse = horse; } public Person2() { } } [Test] public void GetAllTest() { ServiceRegistry .Register<Person>() .Register(typeof(Person2)); var person = ServiceLocator.Get<IPerson>(); Assert.IsTrue(person != null); Assert.IsTrue(typeof(IPerson).IsAssignableFrom(person.GetType())); var items = ServiceLocator.GetAll<IPerson>().ToArray(); Assert.IsTrue(items.Length == 2); Assert.IsTrue(items[0] is Person); Assert.IsTrue(items[1] is Person2); }
[Contract] interface IParameterConstructorInterface { int Id { get; } string Name { get; } IPerson Person { get; } } class ParameterConstructorClass : IParameterConstructorInterface { public int Id { get; private set; } public string Name { get; private set; } public IPerson Person { get; private set; } public ParameterConstructorClass(int id, string name, IPerson person) { Id = id; Name = name; Person = person; } }
//传递数组的方式
[Test] public void NeedParameterConstructorTest() { var person = new Person(); ServiceRegistry.Register<ParameterConstructorClass>(); var instance = ServiceLocator.Current.Get(typeof(IParameterConstructorInterface), 10, "ZhangSan", person) as IParameterConstructorInterface; Assert.IsNotNull(instance); Assert.IsNotNull(instance); Assert.AreEqual(10, instance.Id); Assert.IsTrue("ZhangSan"== instance.Name); Assert.AreSame(person, instance.Person); }
//传递命名参数字典 [Test] public void NeedNamedParameterConstructorTest() { var ps = new Dictionary<string, object>(); var person = new Person(); ps["id"] = 10; ps["name"] = "ZhangSan"; ps["person"] = person; ServiceRegistry.Register<ParameterConstructorClass>(); var instance = ServiceLocator.Current.Get(typeof(IParameterConstructorInterface), ps) as IParameterConstructorInterface; Assert.IsNotNull(instance); Assert.AreEqual(10, instance.Id); Assert.IsTrue("ZhangSan" == instance.Name); Assert.AreSame(person, instance.Person); }
Mini 容器官方网站:
推荐资源: