4

我遇到了一个问题,由于此错误,我无法使用对象方法:

不包含定义……也没有扩展方法……

这与这个问题非常相关。我正在做该问题中给出的答案,但我仍然收到此错误。

namespace MyProject.ViewModel
{
    public class NetworkHealthViewModel : ViewModelBase
    {
        private IDataService _dataService;
        public ObservableCollection<NetworkBandwidthModel> NbicNetworkBandwidth
        public ObservableCollection<NetworkPortalStatusModel> NbicNetworkPortalStatus

        public NetworkHealthViewModel()
        {
            _dataService = new DataServiceNetworkHealth();
            NbicNetworkBandwidth       = new ObservableCollection<NetworkBandwidthModel>();
            NbicNetworkPortalStatus    = new ObservableCollection<NetworkPortalStatusModel>();
            _dataService.LoadChartItems(NetworkBandwidthLoaded, NetworkBandwidthLoadedFailed);
            _dataService.LoadPortalStatus(NetworkPortalStatusLoaded, NetworkPortalStatusLoadedFailed);
         }

错误在于 LoadPortalStatus()。LoadChartItems() 很好。NetworkBandwidthLoaded 和 NetworkPortalStatusLoaded 是代表。

NetworkPortalStatusLoaded 的布局与 NetworkBandwidthLoaded 几乎相同:

private void NetworkPortalStatusLoaded(IEnumerable<ChartModel> portalStatItems) 
{
    NbicNetworkPortalStatus.Clear();

    var networkPortalItems = from item in portalStatItems
                             where ((NetworkPortalStatusModel)item).Unit == "Portal"
                             select item;

    foreach (var item in networkPortalItems)
    {
        NbicNetworkPortalStatus.Add((NetworkPortalStatusModel)item);
    }

    Message = "Network Portal details loaded";
}

我的 DataServiceNetworkHealth 类定义为:

namespace MyProject.DataServices
{
    public class DataServiceNetworkHealth : IDataService
    {
        private Action<IEnumerable<ChartModel>> _delagateSuccess;
        private Action<Exception> _delagateFail;
        private String _portalHtmlResponse;

        public void LoadChartItems(Action<IEnumerable<ChartModel>> success, Action<Exception> fail)
        {
          ....
        }

        public void LoadPortalStatus(Action<IEnumerable<ChartModel>> success, Action<Exception> fail)
        {
          ....
        }
    }
}

方法 LoadChartItems() 定义在接口 IDataService 中,但 LoadPortalStatus 没有。也许这就是问题所在。还有其他不使用 LoadPortalStatus 的 DataServiceX 类。

我知道这是一篇很长的帖子,但我认为最好提前提供所有信息。:-) 谢谢你的帮助!

4

4 回答 4

2

您对_dataServicetype的引用IDataService,这意味着您只能访问由此接口定义的成员(或所述接口的扩展方法)。您提到这LoadPortalStatus不是该界面的一部分,因此您无法通过_dataService参考访问它。

根据评论更新:让我们看另一个示例。如果您定义这样的List<int>引用:

List<int> i = new List<int>();

您可以访问 的所有成员List<T>()和所有成员Object。但是,如果您将引用更改为

IEnumerable<int> i = new List<int>();

唯一可访问的成员iGetEnumerator在 上定义的IEnumerable<T>和继承自 的成员Object

如果包含System.Linq命名空间,您还可以访问为IEnumerable<T>.

的静态类型i确定哪些成员可通过该引用获得。

于 2012-05-08T16:12:36.960 回答
0

如果LoadPortalStatus在接口中不可用(或该接口上的扩展方法),则不能从接口的实例中调用它。

由于您定义:

private IDataService _dataService;

这意味着您只能访问在(或作为扩展方法)接口中_dataService声明的东西,而不管该接口的实现是什么。IDataService

所以你的选择是:

1) 使 _dataService 变量成为已LoadPortalStatus定义的类型。2)添加LoadPortalStatusIDataService界面。IDataService3)为被调用创建一个扩展方法LoadPortalStatus

在我看来,其中任何一个都可以,尽管 1 或 2 可能更可取。

于 2012-05-08T16:11:56.070 回答
0

如果我很愚蠢,请原谅我,但看起来你没有 LoadPortalStatus() 方法。但是,您确实有 2 x LoadChartItems()。

复制粘贴错误?

你有没有机会发布接口代码?

于 2012-05-08T16:12:13.497 回答
0

这可能过于明显,但您是否会因为您的代码中实际上没有LoadPortalStatus方法而收到此错误?

您有多个LoadChartItems具有相同签名的方法 - 是否有可能其中一个应该是LoadPortalStatus()方法?

public void LoadChartItems(Action<IEnumerable<ChartModel>> success, Action<Exception> fail)
{
    ....
}

//Same signature as above - is this supposed to implement LoadPortalStatus??
public void LoadChartItems(Action<IEnumerable<ChartModel>> success, Action<Exception> fail)
{
    ....
}
于 2012-05-08T16:13:32.780 回答