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
,因为类需要呼叫者这是有道理的,但我该如何登记指定它(因为很明显,主叫类每个控制器会发生变化)?