Short story, it worked almost right away. That was cool. However, MediatR requires a bit more "inside knowledge" type of configuration than do a lot of packages that I have used in the past. In this case, I had to figure out how to set up my Unity containers so that MediatR would be happy with them. Thankfully, there is code on the site that configures a Unity container, but it didn't work for me. This is the code currently in the MediatR samples (here):
container.RegisterTypes( AllClasses.FromAssemblies(GetType().Assembly), WithMappings.FromAllInterfaces, GetName, GetLifetimeManager);
When I used this, I got an error at startup telling me that I was attempting to override and existing mapping to System.Web.Http.Controllers.IHttpController, moving it from one controller class in my project to another. Clearly, I had to tweak the registration. In the end, this is what I came up with:
container.RegisterTypes( MediatRType() WithMappings.FromAllInterfaces, GetName, GetLifetimeManager);and
private IEnumerableMediatrTypes() { var _t = GetType().Assembly.DefinedTypes; var types = _t.Where(f => !f.IsInterface && f.GetInterfaces().Any(x => x.IsGenericType && (x.GetGenericTypeDefinition() == typeof(INotificationHandler<>) || x.GetGenericTypeDefinition() == typeof(IAsyncNotificationHandler<>) || x.GetGenericTypeDefinition() == typeof(IRequestHandler<,>) || x.GetGenericTypeDefinition() == typeof(IAsyncRequestHandler<,>) || x.GetGenericTypeDefinition() == typeof(IRequest<>)))); return types; }
I'm thinking I should issue a pull request; I think this is a better mechanism.
No comments:
Post a Comment