-
Notifications
You must be signed in to change notification settings - Fork 0
EdifactParser ru
Leksiqq edited this page Apr 5, 2024
·
4 revisions
Класс транслятора из EDIFACT в XML. При использовании должен быть зарегистрирован в качестве сервиса в системе внедрения зависимостей. Также ожидает, что зарегистрирован интерфейс Net.Leksi.IStreamFactory.
-
public event InterchangeEventHandler? Interchange;
- вызывается в начале и в конце сессии (см. InterchangeEventHandler. -
public event GroupEventHandler? Group;
- вызывается в начале и в конце функциональной группы, если имеются (см. GroupEventHandler. -
public event MessageEventHandler? Message;
- вызывается в начале и в конце сообщения (см. MessageEventHandler.
-
public async Task ParseAsync(EdifactParserOptions options, CancellationToken? cancellationToken)
- запускает процесс трансляции из EDIFACT в XML в соответствии с опциямиoptions
(см. EdifactParserOptions.
Program.cs
:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Services.AddSingleton<EdifactParser>();
builder.Services.AddHostedService<EdifactParserService>();
builder.Services.AddKeyedSingleton<IStreamFactory, LocalFileStreamFactory>("file");
IHost host = builder.Build();
await host.RunAsync();
EdifactParserService.cs
:
...
public class EdifactParserService(IServiceProvider services): BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
try
{
EdifactParser parser = services.GetRequiredService<EdifactParser>();
parser.Interchange += Parser_Interchange;
parser.Group += Parser_Group;
parser.Message += Parser_Message;
EdifactParserOptions options = new()
{
...
};
while(!cancellationToken.IsCancellationRequested){
options.Input = ...;
await parser.ParseAsync(options, cancellationToken);
options.Input.Close();
}
}
finally
{
await services.GetRequiredService<IHost>().StopAsync(cancellationToken);
}
}
...
}