NServiceBus 6, Autofac 및 .NET 웹 API 응용 프로그램을 사용하여 닭고기 및 달걀 문제가 발생했습니다. NSB 문서에 따르면, NSB 6 does not automatically inject IMessageSession into a controller. Startup.cs에서 끝점 구성을 수행 할 때 미리 작성된 컨테이너를 제공해야하지만 이후에 만든 끝점을 등록해야합니다.NSeviceBus 6 - .Net 웹 API 컨트롤러에 Autofac을 사용하여 IMessageSession을 주입하는 방법?
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에서는 NSB가 주입하도록 Bususend 속성을 자동으로 추가하고 Bus.Send()를 사용했습니다. –