Как объединить пути в конфигурации Spring.Net, чтобы использовать его в качестве аргумента свойства или конструктора? - PullRequest
0 голосов
/ 17 января 2012

Существует ли простой "встроенный" способ объединения путей для использования их в качестве одного параметра?

Я использую собственную реализацию под названием 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>

Это установит комбинированный путь к комбинации возвращаемого значения метода GetBasePath вместе с «Temp», например C: \ MyBasePath \ Temp.

Сам класс 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 Ответ

2 голосов
/ 17 января 2012

Вы пытались использовать выражение? Например:

<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>
...