다음과 같은 문제점이 있습니다.IEventProcessor (Event Hub)를 구현하는 클래스에 종속성을 전달하는 방법
우리는 이벤트 허브를 사용합니다. 다음 클래스에서 우리는 IEventProcessor에서 상속받습니다. 그리고 우리가 볼 수있는 것처럼 Service Locator를 사용합니다. 생성자/속성 주입과 함께 작동시킬 수는 없습니다. Castle Windsor는 IEventProcessor에서 상속하는 클래스를 만들 때 종속성을 해결할 수없는 것으로 보입니다. 그게 알려진 이슈입니까, 아니면 제대로 작동시키기 위해해야 할 일이 있습니까?
public class EventProcessor : IEventProcessor
{
private readonly IEventService _eventService;
private readonly ILogger _logger;
private readonly Lazy<RetryPolicy> _retryPolicy;
private readonly IConfigurationProvider _configurationProvider;
public EventProcessor()
{
try
{
_eventService = ContainerProvider.Current.Container.Resolve<IEventService>();
_logger = ContainerProvider.Current.Container.Resolve<ILogger>();
_configurationProvider = ContainerProvider.Current.Container.Resolve<IConfigurationProvider>();
}
catch (Exception exception)
{
_logger.WriteError(string.Format("Error occured when intializing EventProcessor: '{0}'", exception));
}
}
public Task OpenAsync(PartitionContext context)
{
return Task.FromResult(0);
}
public async Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> events)
{
var eventsList = events.ToList();
EventData lastEvent = null;
foreach (var eventData in eventsList)
{
_logger.WriteVerbose(string.Format("Consumming {0} events...", eventsList.Count()));
_eventService.ProcessEvent(eventData);
lastEvent = eventData;
}
if (lastEvent != null)
{
await AzureServiceBusRetryPolicy.ExecuteAsync(async() => await context.CheckpointAsync(lastEvent));
}
}
public async Task CloseAsync(PartitionContext context, CloseReason reason)
{
_logger.WriteInfo("EventHub processor was closed for this reason: " + reason);
if (reason == CloseReason.Shutdown)
{
await AzureServiceBusRetryPolicy.ExecuteAsync(async() => await context.CheckpointAsync());
}
}
}
감사
IComponentContext를 삽입하거나 Func eventProcessorFactory를 삽입하면 RegisterType ()를 호출 할 수 있습니다. –