comparison Implab.ServiceHost/Unity/ContainerBuilder.cs @ 280:f07be402ab02 v3

Added Trace<T>.Debug(...) method for debug messages Added ContainerBuilde.LoadConfig(Uri) method
author cin
date Fri, 25 May 2018 19:15:26 +0300
parents 8714471e8d78
children
comparison
equal deleted inserted replaced
279:8714471e8d78 280:f07be402ab02
1 using System; 1 using System;
2 using System.IO;
2 using System.Reflection; 3 using System.Reflection;
4 using Implab.Diagnostics;
3 using Unity; 5 using Unity;
4 6
5 namespace Implab.ServiceHost.Unity { 7 namespace Implab.ServiceHost.Unity {
8 using static Trace<ContainerBuilder>;
9
6 public class ContainerBuilder { 10 public class ContainerBuilder {
7 11
8 readonly TypeResolver m_resolver; 12 readonly TypeResolver m_resolver;
9 13
10 readonly IUnityContainer m_container; 14 readonly IUnityContainer m_container;
11 15
12 readonly ContainerConfigurationSchema m_schema; 16 readonly ContainerConfigurationSchema m_schema;
17
18 Uri m_location;
13 19
14 public IUnityContainer Container { 20 public IUnityContainer Container {
15 get { 21 get {
16 return m_container; 22 return m_container;
17 } 23 }
95 101
96 public void AddAssembly(string assembly) { 102 public void AddAssembly(string assembly) {
97 103
98 } 104 }
99 105
106 /// <summary>
107 /// Includes the confguration. Creates a new <see cref="ContainerBuilder"/>,
108 /// and loads the configuration to it. The created builder will share the
109 /// container and will have its own isolated type resolver.
110 /// </summary>
111 /// <param name="file">A path to configuration relative to the current configuration.</param>
100 public void Include(string file) { 112 public void Include(string file) {
101 var includeContext = new ContainerBuilder(m_container, m_schema); 113 var includeContext = new ContainerBuilder(m_container, m_schema);
102 includeContext.LoadConfig(file); 114
115 if (m_location != null) {
116 var uri = new Uri(m_location, file);
117 includeContext.LoadConfig(uri);
118 } else {
119 includeContext.LoadConfig(file);
120 }
103 } 121 }
104 122
123 /// <summary>
124 /// Loads a configuration from the specified local file.
125 /// </summary>
126 /// <param name="file">The path to the configuration file.</param>
105 public void LoadConfig(string file) { 127 public void LoadConfig(string file) {
106 var config = m_schema.LoadFile(file); 128 Safe.ArgumentNotEmpty(file, nameof(file));
129
130 LoadConfig(new Uri(Path.GetFullPath(file)));
131 }
132
133 public void LoadConfig(Uri location) {
134 Safe.ArgumentNotNull(location, nameof(location));
135
136 m_location = location;
137
138 var config = m_schema.LoadConfig(location.ToString());
107 config.Visit(this); 139 config.Visit(this);
108 } 140 }
109 141
110 } 142 }
111 } 143 }