Автор предоставляет example о том, как использовать MediatR в консольное приложение с помощью Autofac:Как использовать MediatR с Autofac в 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);
Я взял этот пример и попытался, чтобы заставить его работать с ASP MVC 5 и 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));
Когда я запускаю веб-приложение, я получаю страницу с сообщением об ошибке, указывающую, что зависимость ServiceLocationProvider
не зарегистрирована. Что я делаю не так?
Я подозреваемого, что проблема связана с тем, что я регистрирующим ServiceLocatorProvider
экземпляра после вызова Build
- в примере автора, метод Build
вызывается после благодаря Lazy<>
. Однако я не знаю, как обойти это.
Nice один, mickaeld. Мне было ясно, спасибо. –