L'autore fornisce un example di come utilizzare MediatR in un'applicazione console utilizzando Autofac:Come utilizzare MediatR con Autofac in ASP MVC 5?
var builder = new ContainerBuilder();
builder.RegisterSource(new ContravariantRegistrationSource());
builder.RegisterAssemblyTypes(typeof (IMediator).Assembly).AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof (Ping).Assembly).AsImplementedInterfaces();
builder.RegisterInstance(Console.Out).As<TextWriter>();
var lazy = new Lazy<IServiceLocator>(() => new AutofacServiceLocator(builder.Build()));
var serviceLocatorProvider = new ServiceLocatorProvider(() => lazy.Value);
builder.RegisterInstance(serviceLocatorProvider);
Ho preso questo esempio e tentato per farlo funzionare con ASP MVC 5 e il pacchetto Autofac.Mvc5:
var builder = new ContainerBuilder();
builder.RegisterSource(new ContravariantRegistrationSource());
builder.RegisterAssemblyTypes(typeof(IMediator).Assembly).AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof(AddPostCommand).Assembly).AsImplementedInterfaces();
builder.RegisterControllers(typeof(HomeController).Assembly);
var container = builder.Build();
var lazy = new Lazy<IServiceLocator>(() => new AutofacServiceLocator(container));
var serviceLocatorProvider = new ServiceLocatorProvider(() => lazy.Value);
builder.RegisterInstance(serviceLocatorProvider);
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Quando si esegue l'applicazione Web, viene visualizzata una pagina di errore che indica che la dipendenza ServiceLocationProvider
non è stata registrata. Che cosa sto facendo di sbagliato?
ho sospetto che il problema è dovuto al fatto che sto registrando il ServiceLocatorProvider
esempio dopo chiamando Build
- nell'esempio dell'autore, il metodo Build
viene richiamato in seguito grazie alla Lazy<>
. Non so come ovviare a questo, però.
bella, mickaeld. Mi è stato chiaro, quindi grazie. –