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

Fix ignored assemblies. Loads them as late as possible. #638

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -67,6 +67,31 @@ public void Should_not_be_valid_if_any_types_null()
result.ShouldBeFalse();
}

[Fact]
public void Should_set_ignored_assemblies_on_appdomainassemblytypescanner_when_creating_default_config()
{
//Given
AppDomainAssemblyTypeScanner.IgnoredAssemblies = null;

//When
var config = NancyInternalConfiguration.Default;

//Then
AppDomainAssemblyTypeScanner.Types.Where(t => config.IgnoredAssemblies.Any(f => f(t.Assembly))).Count().
ShouldEqual(0);
}

[Fact]
public void Should_update_ignored_assemblies_on_appdomianassemblystypescanner_when_adding_one_to_the_config()
{
//Given & When
var config = NancyInternalConfiguration.Default.WithIgnoredAssembly(f => f.FullName.StartsWith("Machine."));

//Then
AppDomainAssemblyTypeScanner.Types.Where (t => config.IgnoredAssemblies.Any (f => f (t.Assembly))).Count ().
ShouldEqual (0);
}

[Fact]
public void Should_allow_additional_ignored_assemblies()
{
Expand Down
Expand Up @@ -2,7 +2,7 @@
{
using System;
using System.Collections.Generic;
using System.IO;
using Nancy.Bootstrapper;
using Nancy.Conventions;
using Xunit;

Expand All @@ -13,6 +13,7 @@ public class DefaultStaticContentsConventionsFixture

public DefaultStaticContentsConventionsFixture()
{
AppDomainAssemblyTypeScanner.LoadNancyAssemblies();
this.conventions = new NancyConventions();
this.staticContentsConventions = new DefaultStaticContentsConventions();
}
Expand Down
Expand Up @@ -2,6 +2,7 @@ namespace Nancy.Tests.Unit.Conventions
{
using System;
using System.Collections.Generic;
using Nancy.Bootstrapper;
using Nancy.Conventions;
using Nancy.ViewEngines;
using Xunit;
Expand All @@ -13,6 +14,7 @@ public class DefaultViewLocationConventionsFixture

public DefaultViewLocationConventionsFixture()
{
AppDomainAssemblyTypeScanner.LoadNancyAssemblies ();
this.conventions = new NancyConventions();
this.viewLocationConventions = new DefaultViewLocationConventions();
}
Expand Down
16 changes: 11 additions & 5 deletions src/Nancy/Bootstrapper/AppDomainAssemblyTypeScanner.cs
Expand Up @@ -13,11 +13,6 @@ namespace Nancy.Bootstrapper
/// </summary>
public static class AppDomainAssemblyTypeScanner
{
static AppDomainAssemblyTypeScanner()
{
LoadNancyAssemblies();
}

/// <summary>
/// Nancy core assembly
/// </summary>
Expand Down Expand Up @@ -66,6 +61,10 @@ public static IEnumerable<Type> Types
{
get
{
if (!nancyAssembliesLoaded)
{
LoadNancyAssemblies();
}
return types;
}
}
Expand Down Expand Up @@ -146,6 +145,13 @@ private static void UpdateAssemblies()
/// </summary>
public static void LoadNancyAssemblies()
{
//If the ignoredassemblies is null at this point get the default ignored assemblies from the internal config.
//These will get updates when the user adjusts them.
if (IgnoredAssemblies == null)
{
IgnoredAssemblies = NancyInternalConfiguration.DefaultIgnoredAssemblies;
}

if (nancyAssembliesLoaded)
{
return;
Expand Down
4 changes: 1 addition & 3 deletions src/Nancy/Bootstrapper/NancyBootstrapperBase.cs
Expand Up @@ -53,8 +53,6 @@ public abstract class NancyBootstrapperBase<TContainer> : INancyBootstrapper, IN
/// </summary>
protected NancyBootstrapperBase()
{
AppDomainAssemblyTypeScanner.LoadNancyAssemblies();

this.ApplicationPipelines = new Pipelines();
this.conventions = new NancyConventions();
}
Expand Down Expand Up @@ -209,7 +207,7 @@ public void Initialise()
{
throw new InvalidOperationException("Configuration is invalid");
}

this.ApplicationContainer = this.GetApplicationContainer();

this.RegisterBootstrapperTypes(this.ApplicationContainer);
Expand Down
3 changes: 3 additions & 0 deletions src/Nancy/Bootstrapper/NancyInternalConfiguration.cs
Expand Up @@ -51,6 +51,7 @@ public static NancyInternalConfiguration Default
{
get
{
UpdateIgnoredAssemblies(DefaultIgnoredAssemblies);
return new NancyInternalConfiguration
{
RouteResolver = typeof(DefaultRouteResolver),
Expand Down Expand Up @@ -251,6 +252,8 @@ public IEnumerable<CollectionTypeRegistration> GetCollectionTypeRegistrations()
public NancyInternalConfiguration WithIgnoredAssembly(Func<Assembly, bool> ignorePredicate)
{
this.ignoredAssemblies.Add(ignorePredicate);

UpdateIgnoredAssemblies(IgnoredAssemblies);

return this;
}
Expand Down