【问题标题】:Calling a class constructor with an interface parameter使用接口参数调用类构造函数
【发布时间】:2017-10-04 16:24:55
【问题描述】:

我目前正在开发一个使用 SignalR 的项目。 Startup()constructor 需要无参数,这意味着调用 ChatHub 构造函数我需要使用下面的这段代码。

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


    app.MapSignalR();
}

我遇到的问题是ConnectionService 的参数需要interface 的参数

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

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

相对较新的接口,我知道你不能创建 interface 的实例,这意味着我不能将它传递给 constructor,所以甚至不确定我想要做什么甚至可以完成,任何帮助或解决方案的链接表示赞赏。

【问题讨论】:

  • null 应该适用于任何界面:)
  • 我确实尝试传入 null,但是当我尝试使用它时,我得到一个错误,说 object is null

标签: c# dependency-injection interface signalr


【解决方案1】:

传入一个实现该接口的具体类。它可以是用于测试目的的模拟,也可以是真正的实现。

【讨论】:

  • 接口是IRepository,我将如何创建一个实现这个的新类?
  • 好吧...从机械上讲,实现一个接口就是实现它的契约方法、属性、事件等。但我觉得你的实际问题不是那个,而是你将如何实际实现这些方法,如果有的话, 属性等来自 IRepository。这是stackoverflow无法帮助您的地方,您需要深入挖掘并构建领域知识才能实现接口。我怀疑这里是否有人会为您复制粘贴代码。
【解决方案2】:

你也可以传递一个空实现:

public class MyNull : ISomeInterface
{
   //You implement the ISomeInterface members with empty bodies
}

然后将其传递为:

new MyNull()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多