代码之家  ›  专栏  ›  技术社区  ›  Remotec

统一框架-将整数和字符串传递到解析对象中

  •  3
  • Remotec  · 技术社区  · 14 年前

    有没有办法使用unity框架将一个整数作为参数传递到构造函数或解析对象中?

    伪代码..

    IService svc = Container.Resolve<ConcreteService>()
    

    在这种情况下,具体的服务将是这样的…

    public class ConcreteService
    {
        public ConcreteService(int val)
        {
        }
    }
    

    另外,我需要在XML配置中完成这项工作,而不是在代码中完成这项工作。

    提前谢谢。

    1 回复  |  直到 14 年前
        1
  •  5
  •   er-v    14 年前

    希望我理解你是对的

       public class ConcreteService {
    
            public int Val { get; set; }
    
            public ConcreteService(int val) {
                Val = val;
            }
        }
    

    现在我们来配置unity。

            var container = new UnityContainer();
    
            container.RegisterType<ConcreteService>();
            container.Configure<InjectedMembers>().ConfigureInjectionFor<ConcreteService>(new InjectionConstructor(1));
    
            container.RegisterType<ConcreteService>("for42");
            container.Configure<InjectedMembers>().ConfigureInjectionFor<ConcreteService>("for42",
                                                                                          new InjectionConstructor(42));
            container.RegisterType<ConcreteService>("for31");
            container.Configure<InjectedMembers>().ConfigureInjectionFor<ConcreteService>("for31",
                                                                                          new InjectionConstructor(31));
    
            Debug.WriteLine(container.Resolve<ConcreteService>().Val); //1
            Debug.WriteLine(container.Resolve<ConcreteService>("for42").Val); //42
            Debug.WriteLine(container.Resolve<ConcreteService>("for31").Val); //31
    

    “For42”的等价构型是

    统一1.4

    <type type="ConcreteService"  name="for42">
              <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,
                                         Microsoft.Practices.Unity.Configuration">
                <constructor>
                  <param name="val" parameterType="int">
                    <value value="42"/>
                  </param>
                </constructor>           
              </typeConfig>
            </type>
    

    统一2

    基本相同,但没有多余的typeconfig节点

    <type type="ConcreteService"  name="for42">
            <constructor>
                  <param name="val" parameterType="int">
                    <value value="42"/>
                  </param>
                </constructor>           
            </type>