如何组合Spring.Net配置中的路径以将其用作属性或构造函数参数?

时间:2012-01-17 10:20:05

标签: .net ioc-container spring.net

是否有一种简单的“内置方式”组合路径,将它们用作单个参数?

我使用一个名为SpringPathCombiner的自己的实现来执行以下操作:

<property name="CombinedPath">
  <object type="SpringExt.SpringPathCombiner, SpringExt">
    <constructor-arg name="path1">
      <object factory-method="GetBasePath" factory-object="MyConfig" />
    </constructor-arg>
    <constructor-arg name="path2" value="Temp" />
  </object>
</property>

这会将Combined路径设置为返回值的组合 方法GetBasePath与“Temp”一起使用,例如C:\ MyBasePath \温度

SpringPathCombiner类本身非常简单:

public class SpringPathCombiner
{
    private readonly string path;

    public SpringPathCombiner(string path1, string path2)
    {
        path = Path.Combine(path1, path2);
    }

    public static implicit operator string(SpringPathCombiner combiner)
    {
        return combiner.path;
    }

    public override string ToString()
    {
        return path;
    }
}

但是我不想让代码重复,我认为必须通过一种方式来处理Spring本身带来的事情。没有自己的实现,任何人都知道如何做到这一点,例如直接使用Path.Combine?

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用表达式?例如:

<object id="MyObject" type="q8892913.MyClass, q8892913">
  <property name="Path" expression="T(System.IO.Path).Combine('c:\dev', 'Temp')" />
</object>

您也可以轻松使用其他对象的属性:

<object id="MyObject" type="q8892913.MyClass, q8892913">
  <property name="Path" expression="T(System.IO.Path).Combine(@(MyConfig).Path, 'Temp')" />
</object>

<object id="MyConfig" type="q8892913.MyClass, q8892913">
  <property name="Path" value="c:\dev" />
</object>