【问题标题】:Pass parameter to class which inherits an interface将参数传递给继承接口的类
【发布时间】:2017-05-02 17:48:28
【问题描述】:

我正在尝试在信号器应用程序中使用依赖注入,我目前使用此文档作为指南:https://docs.microsoft.com/en-us/aspnet/signalr/overview/advanced/dependency-injection

我遇到的问题是我有一个继承接口的类,并且在构造函数中需要一个参数。

public partial class ConnectionService : IConnectionService
{
    private readonly IRepository<Connection> _connectionRepository;

    public ConnectionService(IRepository<Connection> connection)
    {
        this._connectionRepository = connection;
    }
}

在我使用的代码示例的文档中说要使用这段代码:

public void Configuration(IAppBuilder app)
{
    GlobalHost.DependencyResolver.Register(
        typeof(ChatHub), 
        () => new ChatHub(new ChatMessageRepository()));

    App.MapSignalR();

    // ...
}

在我的项目中使用它时遇到的问题是 ConnectionService 类需要一个参数 IRepository

GlobalHost.DependencyResolver.Register(
        typeof(ChatHub),
        () => new ChatHub(new ConnectionService()));

我是使用接口的新手,所以我不确定我实际上要传递什么,每当我尝试传递像 IConnectionService 或 IRepository 这样的对象时,它都会说我不能将它们用作类型。

【问题讨论】:

    标签: c# interface signalr


    【解决方案1】:

    这样的代码有什么问题???只需使用现有的构造函数。

    GlobalHost.DependencyResolver.Register(
            typeof(ChatHub),
            () => new ChatHub(new ConnectionService(someArgument));
    

    编辑: 您的 ConnectionService 类可能需要实现 IRepository。

    【讨论】:

    • 这就是他所说的他想要做的,但他提供的论点不是正确的类型。
    • ConnectionService 已经从 IConnectionService 继承,我想不出一种方法来传递 IRepository 参数以使用该类
    【解决方案2】:

    你不能传入接口的实例,因为接口不能被实例化。您需要传递给构造函数的参数是一个继承 IRepository 接口的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多