public MyServiceDescriptor(Type serviceType, Func <IServiceProvider, object> factory, MyServiceLifetime lifetime) { ServiceType = serviceType; ImplementationType = factory.Method.ReturnType; ImplementationFactory = factory; Lifetime = lifetime; }
public MyServiceDescriptor(Type serviceType, object implementation, MyServiceLifetime lifetime) { ServiceType = serviceType; ImplementationType = implementation.GetType(); Implementation = implementation; Lifetime = lifetime; }
public static MyServiceCollection AddMyMediator(this MyServiceCollection services, MyServiceLifetime lifetime, params Type[] markers) { var handlersInfo = new Dictionary <Type, Type>(); foreach (Type marker in markers) { var assembly = marker.Assembly; var requests = GetClassesImplementingInterface(assembly, typeof(IRequest <>)); var handlers = GetClassesImplementingInterface(assembly, typeof(IRequestHandler <,>)); foreach (Type request in requests) { Type requestHandler = handlers.SingleOrDefault(h => request == h.GetInterfaces().First().GetGenericArguments().First()); handlersInfo.Add(request, requestHandler); } var serviceDescriptor = handlers.Select(x => new MyServiceDescriptor(x, x, lifetime)); services.AddServiceDescriptor(serviceDescriptor); } services.RegisterSingleton <IMediator>(x => new MyMediator(x.GetService, handlersInfo)); return(services); }
public MyServiceDescriptor(Type serviceType, Type implementationType, MyServiceLifetime lifetime) { ServiceType = serviceType; ImplementationType = implementationType; Lifetime = lifetime; }