Auflösung einer kreisförmigen/rekursiven Abhängigkeit mit AbhängigkeitsinjektionC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Auflösung einer kreisförmigen/rekursiven Abhängigkeit mit Abhängigkeitsinjektion

Post by Anonymous »

Sag, ich habe diese Schnittstelle: < /p>

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
}
}
Ein Fabrik/Resolver:

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();
}
}
, was ich für eine Klasse/Schnittstellenstruktur hielt, die Sinn machte und das DI -Framework die Objekte für mich konstruieren ließ. Es gibt jedoch ein Problem, wenn ich eine andere konkrete Implementierung habe:

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());
}
}
}
Jetzt gibt es eine kreisförmige Referenz, da der Resolver das ZiPexample -Beispiel benötigt, aber das Zipexample braucht auch den Resolver. /> Ich weiß auch, dass ich IserviceProvider < /code> stattdessen, aber lesen Sie es war eine schlechte Praxis, da es die Abhängigkeiten einer Klasse versteckt, also denke ich, ich suche zu sehen, ob es eine andere Lösung gibt oder was die Leute empfehlen würden? Danke

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post