Я столкнулся с проблемой курица и яйца с использованием NServiceBus 6, Autofac и приложения .NET для веб-приложений. Согласно документации NSB, NSB 6 does not automatically inject IMessageSession into a controller. Когда я делаю конфигурацию конечной точки в Startup.cs, мне нужно предоставить ей готовый контейнер, но тогда мне также нужно зарегистрировать созданную впоследствии конечную точку.NSeviceBus 6 - Как ввести IMessageSession с помощью Autofac в .Net Web API-контроллер?
Autofac жалуется, что использование Builder.Update()
для модификации контейнера является устаревшим. Это работает, но я хотел получить некоторую обратную связь относительно лучшего способа сделать это, если это возможно.
var httpConfig = new HttpConfiguration();
var builder = new ContainerBuilder();
builder.RegisterAssemblyModules(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
var container = builder.Build();
httpConfig.DependencyResolver = new AutofacWebApiDependencyResolver(container);
var config = new EndpointConfiguration("....");
config.SendFailedMessagesTo("Error");
//......
config.SendOnly();
config.UseContainer<AutofacBuilder>(customizations =>
{
customizations.ExistingLifetimeScope(container);
});
var endpointInstance = Endpoint.Start(config).GetAwaiter().GetResult();
// This is now needed to get IMessageSession injected into the controller
var builder = new ContainerBuilder();
builder.RegisterInstance(endpointInstance).As<IMessageSession>();
// Autofac says Update is OBSOLETE and not to modify the
// container after it is built!
builder.Update(container);
Зачем вам нужно вводить IMessageSession в первую очередь? Если вы объясните, чего вы хотите достичь, мы можем предложить альтернативу, поэтому вам не нужно обновлять контейнер после его создания. –
Это не похоже, что этот код - это то, что вы используете, поскольку у вас есть две переменные с именем «config» в той же области. –
@HadiEskandari Мне нужно иметь возможность отправлять сообщения с моих веб-контроллеров api. В NSB 5 я добавил бы свойство IBus, которое будет автоматически настроено для ввода NSB и используется Bus.Send(). –