Skip to content
This repository has been archived by the owner on Feb 15, 2023. It is now read-only.

Commit

Permalink
Merge pull request #71 from jbogard/no-appdomain-scanning
Browse files Browse the repository at this point in the history
Removing AppDomain scanning, requiring assemblies to be passed in
  • Loading branch information
jbogard committed Apr 30, 2019
2 parents 7e10071 + f1d7f23 commit 073e586
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 71 deletions.
Expand Up @@ -19,31 +19,14 @@ namespace MediatR
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// Registers handlers and the mediator types from <see cref="AppDomain.CurrentDomain"/>.
/// </summary>
/// <param name="services">Service collection</param>
/// <returns>Service collection</returns>
public static IServiceCollection AddMediatR(this IServiceCollection services)
=> services.AddMediatR(AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.IsDynamic), configuration: null);

/// <summary>
/// Registers handlers and the mediator types from <see cref="AppDomain.CurrentDomain"/>.
/// </summary>
/// <param name="services">Service collection</param>
/// <param name="configuration">The action used to configure the options</param>
/// <returns>Service collection</returns>
public static IServiceCollection AddMediatR(this IServiceCollection services, Action<MediatRServiceConfiguration> configuration)
=> services.AddMediatR(AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.IsDynamic), configuration);

/// <summary>
/// Registers handlers and mediator types from the specified assemblies
/// </summary>
/// <param name="services">Service collection</param>
/// <param name="assemblies">Assemblies to scan</param>
/// <returns>Service collection</returns>
public static IServiceCollection AddMediatR(this IServiceCollection services, params Assembly[] assemblies)
=> services.AddMediatR(assemblies.AsEnumerable(), configuration: null);
=> services.AddMediatR(assemblies, configuration: null);

/// <summary>
/// Registers handlers and mediator types from the specified assemblies
Expand All @@ -53,7 +36,7 @@ public static IServiceCollection AddMediatR(this IServiceCollection services, pa
/// <param name="configuration">The action used to configure the options</param>
/// <returns>Service collection</returns>
public static IServiceCollection AddMediatR(this IServiceCollection services, Action<MediatRServiceConfiguration> configuration, params Assembly[] assemblies)
=> services.AddMediatR(assemblies.AsEnumerable(), configuration);
=> services.AddMediatR(assemblies, configuration);

/// <summary>
/// Registers handlers and mediator types from the specified assemblies
Expand All @@ -64,6 +47,10 @@ public static IServiceCollection AddMediatR(this IServiceCollection services, Ac
/// <returns>Service collection</returns>
public static IServiceCollection AddMediatR(this IServiceCollection services, IEnumerable<Assembly> assemblies, Action<MediatRServiceConfiguration> configuration)
{
if (!assemblies.Any())
{
throw new ArgumentException("No assemblies found to scan. Supply at least one assembly to scan for handlers.");
}
var serviceConfig = new MediatRServiceConfiguration();

configuration?.Invoke(serviceConfig);
Expand All @@ -82,7 +69,7 @@ public static IServiceCollection AddMediatR(this IServiceCollection services, IE
/// <param name="handlerAssemblyMarkerTypes"></param>
/// <returns>Service collection</returns>
public static IServiceCollection AddMediatR(this IServiceCollection services, params Type[] handlerAssemblyMarkerTypes)
=> services.AddMediatR(handlerAssemblyMarkerTypes.AsEnumerable(), configuration: null);
=> services.AddMediatR(handlerAssemblyMarkerTypes, configuration: null);

/// <summary>
/// Registers handlers and mediator types from the assemblies that contain the specified types
Expand All @@ -92,7 +79,7 @@ public static IServiceCollection AddMediatR(this IServiceCollection services, pa
/// <param name="configuration">The action used to configure the options</param>
/// <returns>Service collection</returns>
public static IServiceCollection AddMediatR(this IServiceCollection services, Action<MediatRServiceConfiguration> configuration, params Type[] handlerAssemblyMarkerTypes)
=> services.AddMediatR(handlerAssemblyMarkerTypes.AsEnumerable(), configuration);
=> services.AddMediatR(handlerAssemblyMarkerTypes, configuration);

/// <summary>
/// Registers handlers and mediator types from the assemblies that contain the specified types
Expand All @@ -102,12 +89,6 @@ public static IServiceCollection AddMediatR(this IServiceCollection services, Ac
/// <param name="configuration">The action used to configure the options</param>
/// <returns>Service collection</returns>
public static IServiceCollection AddMediatR(this IServiceCollection services, IEnumerable<Type> handlerAssemblyMarkerTypes, Action<MediatRServiceConfiguration> configuration)
{
var serviceConfig = new MediatRServiceConfiguration();
configuration?.Invoke(serviceConfig);
ServiceRegistrar.AddRequiredServices(services, serviceConfig);
ServiceRegistrar.AddMediatRClasses(services, handlerAssemblyMarkerTypes.Select(t => t.GetTypeInfo().Assembly));
return services;
}
=> services.AddMediatR(handlerAssemblyMarkerTypes.Select(t => t.GetTypeInfo().Assembly), configuration);
}
}

This file was deleted.

Expand Up @@ -43,5 +43,15 @@ public void ShouldResolveNotificationHandlers()
{
_provider.GetServices<INotificationHandler<Pinged>>().Count().ShouldBe(3);
}

[Fact]
public void ShouldRequireAtLeastOneAssembly()
{
var services = new ServiceCollection();

Action registration = () => services.AddMediatR(new Type[0]);

registration.ShouldThrow<ArgumentException>();
}
}
}

0 comments on commit 073e586

Please sign in to comment.