Der Autor bietet eine example wie Autofac mit MediatR in einer Konsolenanwendung verwenden:Wie verwende ich MediatR mit 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);
ich dieses Beispiel nahm und versucht, um es mit ASP MVC 5 und dem Autofac.Mvc5 Paket funktioniert:
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));
Wenn ich die Webanwendung ausführen, erhalte ich eine Fehlerseite, die mir sagt, dass die ServiceLocationProvider
Abhängigkeit nicht registriert wurde. Was mache ich falsch?
ich Verdächtiger, dass das Problem auf die Tatsache zurückzuführen ist, dass ich die ServiceLocatorProvider
Instanz bin Registrierung nachBuild
Aufruf - in dem Beispiel des Autors, die Build
Methode wird aufgerufen, danach dank Lazy<>
. Ich weiß jedoch nicht, wie ich das umgehen soll.
Nice one, mickaeld. Mir war klar, danke. –