Meine Komponententests verfügen über eine eigene ServiceCollection, in der ich die Dienste registriert habe, die meine Anwendung benötigt. Für mein Experiment registriere ich einen Singleton (
Code: Select all
SomethingIch füge jetzt den TestClusterBuilder von Orleans zu meinem Komponententest hinzu. Laut Dokumentation muss ich AddSiloBuilderConfigurator... hinzufügen.
Wie vermeide ich die doppelte Registrierung von Etwas? Das fühlt sich an wie eine Henne-Ei-Situation. Schlimmer noch: Das Etwas, das in meine Grains injiziert wird, ist ein anderes Singleton als das Etwas, das in der App registriert wird.
Dies scheint nur in meinen Unit-Tests ein Problem zu sein. Im Hauptanwendungscode gibt es keinen TestClusterBuilder und der DI funktioniert wie erwartet.
Mein Code sieht ungefähr so aus:
Code: Select all
[SetUp]
public void Setup()
{
var webApplicationBuilder = WebApplication.CreateBuilder();
webApplicationBuilder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureContainer(c =>
{
c.RegisterType().AsSelf().SingleInstance();
});
var app = webApplicationBuilder.Build();
var testClusterBuilder = new TestClusterBuilder(1);
testClusterBuilder.AddSiloBuilderConfigurator();
TestCluster = testClusterBuilder.Build();
TestCluster.Deploy();
}
public class TestSiloConfigurations : ISiloConfigurator
{
public void Configure(ISiloBuilder siloBuilder)
{
siloBuilder.ConfigureServices(services =>
{
services.AddSingleton();
});
}
}
Mobile version