【问题标题】:How to associate a Interface, with classes from different solutions如何将接口与来自不同解决方案的类关联
【发布时间】:2014-02-25 11:37:41
【问题描述】:

我有一个名为 iChannels 的接口,它只有一个方法。

using CHNL;
namespace iInterface
{
    public interface iChannels
    {
        string getData(string docXML);
    }
}

然后在另一个项目中,我有一个名为 Channel1 的类,它的定义如下:

using iInterface;
namespace CHNL
{
   public class Channel1:iChannels
   {
       string getData(string str)
       {
           return str;
       }
   }
}

我必须做一个交叉引用,因为接口和类是相互认识的。 之后我有一个网络表单,我只想使用using iInterface;,但如果我只这样做,我就无法创建 Channel1 对象。

我的意图是创建 Channel1 对象,只使用 iInterface Library。

【问题讨论】:

  • 我不明白你的意思,但你确定这个Channel1:iInterface不应该是Channel1:iChannels吗? Also1:您不能向接口添加对其实现类的引用。 Also2: 请定义I can't。您的代码中没有任何内容向我们展示您所描述的问题 - 那里没有交叉引用。
  • 请遵守此处的 Microsoft 编码约定:msdn.microsoft.com/en-us/library/ff926074.aspx
  • CHNL 项目正在使用 iInterface,而 iInterface 正在使用 CHNL。这不是交叉引用?

标签: c# class interface


【解决方案1】:

我想我现在可以看到您的问题了。

当您说“我的意图是创建 Channel1 对象,仅使用 iInterface 库”时......这在 C# 中是不可能的,或者至少不可能直接创建 Channel1 对象而不在与 iChannel 相同的库中声明 Channel1。

您可以通过依赖注入来实现这一点。从广义上讲,您的网络表单将依赖于 iChannel,并且依赖容器将为它提供 iChannel 的实现,在您的情况下为 Channel1。

看看这篇文章;

Why does one use dependency injection?

【讨论】:

  • 我理解了工厂方法。我申请了我的项目。我有一个客户端应用程序、一个接口、一个工厂和一个类库,我在其中保存所有类。我在客户端项目中包含了对我的工厂的引用,然后我的所有类也都引用了我的工厂。有效。谢谢。
【解决方案2】:

您不能从 iInterface 继承,因为 iInterface 是命名空间的名称而不是接口,所以我认为您需要以下代码;

using iInterface;
namespace CHNL
{
   public class Channel1 : iChannels
   {
       string getData(string str)
       {
           return str;
       }
   }
}

您的网络表单不需要知道 Channel1 类,但您的网络表单所在的项目需要引用 Channel1 所在的项目。

您可以使用类似的方法创建 iChannel 实例;

 iChannels myIChannels = new Channel1();

然后您的网络表单可以引用 iChannel,而无需了解 iChannel 的实际具体实现,在本例中为 Channel1。

最好的做法是使用工厂或依赖注入来创建 iChannel 的实际实现并避免使用“new Channel1();”完全一致。

【讨论】:

  • 第一个 - 这是一个错误,因为我做了“公共类 Channel1:iChannels”。对此感到抱歉。第二 - “iChannels myIChannels = new Channel1();” - 这正是我的问题,因为“new Channel1();”无法识别。
  • 我对工厂方法或依赖注入一无所知。我看了一些教程,但我不明白。你知道一些好的教程吗?请。
  • 这取决于你正在构建什么样的应用程序 Asp Webforms msdn.microsoft.com/en-us/library/ff664622(v=pandp.50).aspx Mvc asp.net/mvc/tutorials/hands-on-labs/… 那里有很多教程。首先,虽然我会尝试选择一个 DI 容器。 Unity 和 Ninject 是两个常用的。
猜你喜欢
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 2023-03-22
  • 2020-11-17
相关资源
最近更新 更多