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

回答

0

自我回答这个问题,也许这将帮助别人:

services.AddSingleton(typeof(IRabbitMqAccessLayer<>), typeof(RabbitMqAccessLayer<>));