Skip to content
This repository was archived by the owner on Jan 24, 2021. It is now read-only.

Commit 6c6dd75

Browse files
committed
Merge pull request #1001 from thecodejunkie/sdhpimprovements
Various SDHP improvements
2 parents 6033029 + 3a081ba commit 6c6dd75

File tree

4 files changed

+46
-17
lines changed

4 files changed

+46
-17
lines changed

Diff for: src/Nancy.Demo.Hosting.Aspnet/Web.config

-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
<razor disableAutoIncludeModelNamespace="false">
1818
<assemblies>
1919
<add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
20-
<add assembly="Nancy.Hosting.Aspnet" />
2120
</assemblies>
2221
<namespaces>
2322
<add namespace="System.Xml" />

Diff for: src/Nancy.ViewEngines.Razor/RazorViewEngine.cs

+9-6
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,13 @@ private Func<INancyRazorView> GenerateRazorViewFactory(IRazorViewRenderer viewRe
155155
GetAssemblyPath(modelType)
156156
};
157157

158+
assemblies.AddRange(AppDomainAssemblyTypeScanner.Assemblies.Select(GetAssemblyPath));
159+
158160
if (referencingAssembly != null)
159161
{
160162
assemblies.Add(GetAssemblyPath(referencingAssembly));
161163
}
162-
163-
assemblies = assemblies
164-
.Union(viewRenderer.Assemblies)
165-
.ToList();
166-
164+
167165
if (this.razorConfiguration != null)
168166
{
169167
var assemblyNames = this.razorConfiguration.GetAssemblyNames();
@@ -178,7 +176,12 @@ private Func<INancyRazorView> GenerateRazorViewFactory(IRazorViewRenderer viewRe
178176
}
179177
}
180178

181-
var compilerParameters = new CompilerParameters(assemblies.ToArray(), outputAssemblyName);
179+
assemblies = assemblies
180+
.Union(viewRenderer.Assemblies)
181+
.ToList();
182+
183+
var compilerParameters =
184+
new CompilerParameters(assemblies.ToArray(), outputAssemblyName);
182185

183186
CompilerResults results;
184187
lock (this.compileLock)

Diff for: src/Nancy/Bootstrapper/AppDomainAssemblyTypeScanner.cs

+37-8
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public static class AppDomainAssemblyTypeScanner
1515
{
1616
static AppDomainAssemblyTypeScanner()
1717
{
18-
LoadNancyAssemblies();
18+
LoadAssembliesWithNancyReferences();
1919
}
2020

2121
/// <summary>
@@ -34,9 +34,9 @@ static AppDomainAssemblyTypeScanner()
3434
private static IEnumerable<Assembly> assemblies;
3535

3636
/// <summary>
37-
/// Indicates whether the nancy assemblies have already been loaded
37+
/// Indicates whether the all Assemblies, that references a Nancy assembly, have already been loaded
3838
/// </summary>
39-
private static bool nancyAssembliesLoaded;
39+
private static bool nancyReferencingAssembliesLoaded;
4040

4141
private static IEnumerable<Func<Assembly, bool>> assembliesToScan;
4242

@@ -206,18 +206,47 @@ where AssembliesToScan.Any(asm => asm(assembly))
206206
}
207207

208208
/// <summary>
209-
/// Loads any Nancy*.dll assemblies in the app domain base directory
209+
/// Loads any assembly that references a Nancy assembly.
210210
/// </summary>
211-
public static void LoadNancyAssemblies()
211+
public static void LoadAssembliesWithNancyReferences()
212212
{
213-
if (nancyAssembliesLoaded)
213+
if (nancyReferencingAssembliesLoaded)
214214
{
215215
return;
216216
}
217217

218-
LoadAssemblies(@"Nancy*.dll");
218+
UpdateAssemblies();
219+
220+
foreach (var directory in GetAssemblyDirectories())
221+
{
222+
var existingAssemblyPaths =
223+
assemblies.Select(a => a.Location).ToArray();
224+
225+
var unloadedAssemblies = Directory
226+
.GetFiles(directory, "*.dll")
227+
.Where(f => !existingAssemblyPaths.Contains(f, StringComparer.InvariantCultureIgnoreCase)).ToArray();
228+
229+
foreach (var unloadedAssembly in unloadedAssemblies)
230+
{
231+
var inspectedAssembly =
232+
Assembly.ReflectionOnlyLoadFrom(unloadedAssembly);
233+
234+
if (inspectedAssembly.GetReferencedAssemblies().Any(r => r.Name.StartsWith("Nancy", StringComparison.OrdinalIgnoreCase)))
235+
{
236+
try
237+
{
238+
Assembly.Load(inspectedAssembly.GetName());
239+
}
240+
catch
241+
{
242+
}
243+
}
244+
}
245+
}
246+
247+
UpdateTypes();
219248

220-
nancyAssembliesLoaded = true;
249+
nancyReferencingAssembliesLoaded = true;
221250
}
222251

223252
/// <summary>

Diff for: src/Nancy/Bootstrapper/NancyBootstrapperBase.cs

-2
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,6 @@ protected virtual DiagnosticsConfiguration DiagnosticsConfiguration
209209
/// </summary>
210210
public void Initialise()
211211
{
212-
AppDomainAssemblyTypeScanner.LoadNancyAssemblies();
213-
214212
if (this.InternalConfiguration == null)
215213
{
216214
throw new InvalidOperationException("Configuration cannot be null");

0 commit comments

Comments
 (0)