Я разместил asp. net kesterl внутри приложения фоновой службы и запустил несколько экземпляров на разных портах одного и того же управляемого объекта с некоторыми конкретными c объектами. Я хочу, чтобы, если когда-либо произойдет попадание в контроллер, следует использовать параметр, который я передал при начальной инициализации. своего рода отдельный экземпляр контроллера для каждого списка. В целях тестирования я пробовал Singleton, но в результате получился единственный экземпляр. Теперь я проверяю, какой тип экземпляра (AddScoped или AddTransient) мне следует использовать в моем сценарии и как я могу ввести параметр во время этого.
Моя текущая база кода выглядит как
internal static IHostBuilder CreateHostBuilder(string listener, CommunicationChannelElement communicationChannelElement)
{
//here i want how i can use addScoped or AddTransient with communication paramter
return Host.CreateDefaultBuilder().ConfigureServices(services => services.AddSingleton(communicationChannelElement)).
ConfigureWebHostDefaults(webBuilder => webBuilder.UseUrls(listener).
UseStartup<Startup>());
}
private void StartBackGroundWebListener(CommunicationChannelElement communicationChannelElement)
{
CreateHostBuilder(_objSettings, communicationChannelElement).Build().Run();//separate thread using task parallel library
}
public void StartAll()
{
StartBackGroundWebListener("http://10.1.2.3:0001",communicationChannelElement1);
StartBackGroundWebListener("http://10.1.2.3:0002",communicationChannelElement2);
StartBackGroundWebListener("http://10.1.2.3:0003",communicationChannelElement3);
}
public class CallBackController : ControllerBase
{
private readonly CommunicationChannelElement CommunicationChannelElement;
public CallBackController(CommunicationChannelElement communicationChannelElement)
{
CommunicationChannelElement = communicationChannelElement;
}
...
}