0
我工作的一個Web應用程序與ASPNET核心1.1 我做了一個類從API發送一些信息(控制器方法)到RabbitMQ的服務器,像這樣ASPNET核心註冊服務
public interface IRabbitMqAccessLayer<TCaller> where TCaller : class
{
bool SendMessage(string message);
}
public class RabbitMqAccessLayer<TCaller>: IRabbitMqAccessLayer<TCaller> where TCaller : class
{
// some internal variables
public RabbitMqAccessLayer(IConfigurationRoot config, IHttpContextAccessor httpContextAccessor)
{
// class initialization
}
public bool SendMessage(string message)
{
// send the message
}
}
TCaller
是使用服務(就像你使用一個logger)
public class TestController: Controller
{
private readonly IRabbitMqAccessLayer<TestController> _rabbit;
public TestController(IRabbitMqAccessLayer<TestController> rabbit)
{
_rabbit = rabbit;
}
public IActionResult Get()
{
_rabbit.SendMessage("some message");
return Ok();
}
}
問題(或者更好,我的錯)是我不知道燙正確配置類(控制器)服務在應用程序啓動
public void ConfigureServices(IServiceCollection services)
{
// some services
services.AddSingleton<IRabbitMqAccessLayer, RabbitMqAccessLayer>(); // <-- ERROR
// some other services
}
這給了我一個錯誤[CS0305] Using the generic type 'IRabbitMqAccessLayer<TCaller>' requires 1 type argument
,因爲類需要呼叫者這是有道理的,但我該如何登記指定它(因爲很明顯,主叫類每個控制器會發生變化)?