Я создал службу gRP C с помощью Protobuff в Visual Studio с ядром. NET и хочу протестировать службу.
У службы есть конструктор:
public ConfigService(ILogger<ConfigService> logger)
{
_logger = logger;
}
Как и ILogger, который каким-то образом вводится (и я понятия не имею, как), я хочу ввести дополнительный параметр - интерфейс. Этот интерфейс должен быть легко настроен во время выполнения, поскольку я хочу установить определенный класс при запуске реального запуска и фиктивный класс при тестировании. например, что-то вроде:
public ConfigService(ILogger<ConfigService> logger, IMyInterface instance)
{
_logger = logger;
_myDepndency = instance;
}
, и это в реальном экземпляре запуска будет new RealClass()
, но при тестировании будет легко передать new MockClass()
.
Класс запуска по-прежнему по умолчанию:
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<ConfigService>();
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
});
});
}
}
Как я могу ввести второй параметр конструктора службы?