Code: Select all
public interface IExample
{
string GetSupportedExtension();
void DoWork(Stream input);
}
< /code>
Eine konkrete Implementierung wie: < /p>
public class PdfExample : IExample
{
public string GetSupportedExtension() => ".pdf";
public void DoWork(Stream input)
{
// Do something with the PDF
}
}
Code: Select all
public class ExampleResolver(IEnumerable examples) : IExampleResolver
{
public IExample? Resolve(string extension)
{
return examples.FirstOrDefault(e => e.GetSupportedExtension() == extension);
}
}
< /code>
In einem Controller wie folgt verwendet: < /p>
[ApiController]
public class ExampleController(IExampleResolver resolver) : ControllerBase
{
[HttpPost("/")]
public async Task DoWork([FromForm] IFormFile file)
{
string extension = Path.GetExtension(file.FileName).ToLower();
IExample? example = resolver.Resolve(extension);
if (example == null)
{
return BadRequest();
}
example.DoWork(file.OpenReadStream());
return Ok();
}
}
Code: Select all
public class ZipExample(IExampleResolver resolver) : IExample
{
public string GetSupportedExtension() => ".zip";
public void DoWork(Stream input)
{
// Load zip from stream
foreach (var file in zip)
{
IExample example = resolver.Resolve(file.Extension);
example.DoWork(file.GetInputStream());
}
}
}
Mobile version