-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathconfig.install.xdt
70 lines (57 loc) · 5.66 KB
/
config.install.xdt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!-- ===================================================== -->
<!-- ==================== Внимание! ====================== -->
<!-- ===================================================== -->
<!-- Все изменения в этом файле нужно так же переносить в
файл config.uninstall.xdt в Flexberry Security, чтобы
при деинсталляции Flexberry Security восстанавливалась
конфигурация ОРМ по-умолчанию. -->
<!-- ===================================================== -->
<!-- ===================================================== -->
<!-- ===================================================== -->
<!--Вставляем временный узел на случай, если в элементе configuration вообще ничего нет, чтобы вставка configSections не завершилась с ошибкой.-->
<ormInstallationTempNode xdt:Transform="Insert" />
<!--При вставке элемента необходимо, чтобы узел, куда он вставляется, обязательно присутствовал, иначе преобразование завершится с ошибкой.
Поэтому, на случай, если узла configSections изначально не было, вставляем свой.-->
<configSections xdt:Transform="InsertBefore(/configuration/*[name()!="configSections"])" />
<ormInstallationTempNode xdt:Transform="RemoveAll" />
<!--Вставка информации о секции конфигурации.-->
<configSections xdt:Locator="Condition(not(section[@name="unity"]))">
<section name="unity"
type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"
xdt:Transform="Insert" />
</configSections>
<!--Если узел configSections уже был до нас, то их будет больше одного, и нам нужно удалить лишние (вставленные нами заведомо располагаются после ранее присутствующего).-->
<configSections xdt:Locator="Condition(position()>1 and not(section[@name!="unity"]))" xdt:Transform="RemoveAll" />
<!--Аналогично узлу configSections поступаем с самой конфигурационной секцией.-->
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity" xdt:Transform="Insert" />
<!--Вставляем узел container в секцию unity.
В узле unity может быть определено пространство имен, а может быть не определено (в присутствующем ранее). Чтобы охватить все варианты, используем XPath и функцию local-name().-->
<unity
xdt:Locator="XPath(/configuration/*[local-name()="unity" and not(*[local-name()="container" and not(@name)])])">
<container xmlns="http://schemas.microsoft.com/practices/2010/unity" xdt:Transform="Insert" />
</unity>
<!--Вставляем в container нужные нам register. Комментарий вставляется для того, чтобы сообщить зависимым пакетам, что это настройка по умолчанию и можно ее изменить.-->
<container
xdt:Locator="XPath(/configuration/*[local-name()="unity"]
/*[local-name()="container" and not(*[local-name()="register" and @type="ICSSoft.STORMNET.Security.ISecurityManager, ICSSoft.STORMNET.DataObject"])])">
<register xmlns="http://schemas.microsoft.com/practices/2010/unity"
type="ICSSoft.STORMNET.Security.ISecurityManager, ICSSoft.STORMNET.DataObject"
mapTo="ICSSoft.STORMNET.Security.EmptySecurityManager, ICSSoft.STORMNET.DataObject"
xdt:Transform="Insert"><!--Flexberry security setting. Used by Flexberry ORM.--></register>
</container>
<container
xdt:Locator="XPath(/configuration/*[local-name()="unity"]
/*[local-name()="container" and not(*[local-name()="register" and @type="ICSSoft.STORMNET.Business.IConfigResolver, ICSSoft.STORMNET.Business"])])">
<register xmlns="http://schemas.microsoft.com/practices/2010/unity"
type="ICSSoft.STORMNET.Business.IConfigResolver, ICSSoft.STORMNET.Business" mapTo="ICSSoft.STORMNET.Business.ConfigResolver, ICSSoft.STORMNET.Business"
xdt:Transform="Insert">
<lifetime type="singleton" />
<constructor/>
</register>
</container>
<!--Удаление лишней секции unity, если их больше одной. Функция position() здесь не подойдет, так как она применится к селектору "/configuration/*" и не даст нужного результата.
Секций может быть максимум две (одна, которая была и одна добавленная нами), если конфигурационный файл был корректным до применения трансформаций. Поэтому следует удалять только узел с индексом 2.-->
<unity xdt:Locator="XPath(/configuration/*[local-name()="unity"][2])" xdt:Transform="RemoveAll"/>
</configuration>