“ne contient pas une définition...et aucune méthode d'extension..” erreur
Je vais avoir un problème lié au fait que je ne peux pas utiliser un des objets de la méthode en raison de cette erreur:
Ne contient pas de définition...et aucune méthode d'extension...
Il est très lié à ce question. Je suis en train de faire ce qui est donné comme la réponse à cette question, mais j'ai toujours cette erreur.
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);
}
L'erreur se situe au LoadPortalStatus(). LoadChartItems() c'est bien. NetworkBandwidthLoaded et NetworkPortalStatusLoaded sont délégués.
NetworkPortalStatusLoaded est posé à peu près la même que 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";
}
Mon DataServiceNetworkHealth classe est définie comme:
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)
{
....
}
}
}
Méthode LoadChartItems() est définie dans l'interface IDataService, mais LoadPortalStatus ne l'est pas. Peut-être que c'est là que réside le problème. Il y a d'autres DataServiceX classes qui n'utilisent pas LoadPortalStatus.
Je sais que c'est un long post, mais j'ai pensé préférable de donner toutes les infos à l'avant. 🙂 Merci pour toute aide!
Je ne vois pas
LoadPortalStatus
méthode dans votre code...Si le
DataServiceNetworkHealth
classe ne déclare pas la LoadPortalStatus
méthode, alors vous ne pouvez pas appeler cette méthode sur une instance de cette classe. Simple. Ce qui me manque? 🙂Où est votre
LoadPortalStatus
méthode déclarée. Je ne vois pas tout et c'est pourquoi il est erroring.Oui. C'était un copier-coller de l'erreur. Je viens de mettre à jour le code post. Merci pour l'attraper!
OriginalL'auteur sshirley | 2012-05-08
Vous devez vous connecter pour publier un commentaire.
Votre référence à
_dataService
est du typeIDataService
, ce qui signifie que vous pouvez uniquement accéder aux membres définis par cette interface (ou des méthodes d'extension pour dit interfae). Vous mentionnez queLoadPortalStatus
ne fait pas partie de l'interface, et donc vous ne pouvez pas y accéder par le biais de la_dataService
de référence.Mis à jour en fonction des commentaires: prenons un autre exemple. Si vous définissez un
List<int>
de référence comme ceci:vous pouvez accéder à tous les membres de
List<T>()
et tous les membres deObject
. Toutefois, si vous modifiez la référence àles seuls membres accessibles par le biais de
i
sontGetEnumerator
qui est définie surIEnumerable<T>
et les membres hérités deObject
.Si vous incluez le
System.Linq
espace de noms, vous aurez également accès à de nombreuses méthodes d'extension définies pourIEnumerable<T>
.Le type statique de
i
détermine quels membres sont disponibles par le biais de cette référence.Je suis en train de dire que si vous faites référence à l'instance grâce à une interface spécifique, alors que c'est le contrat qui définit ce qu'une partie des membres de l'instance que vous avez accès. I. e. l'interface et toutes les méthodes d'extension définis pour que l'interface est les membres, vous pouvez accéder (avec les membres pour Objet de cours).
J'ai mis à jour ma réponse avec un autre exemple. J'espère que ça explique un peu mieux.
C'est tout à fait compréhensible. La raison pour laquelle j'en appelle privée IDataService _dataService; est parce que l'utilisation de MVVM Light, on crée une classe d'un service de données (de type IDataService) pour une utilisation en production, et une classe (nouveau type de IDataService) pour la conception de l'utiliser. Je n'avais pas mis en œuvre ces méthodes dans la conception du temps de la classe. Aussi, puisque aucune de mes autres DataService classes ont été à l'aide de ces méthodes, je n'ai pas pensé à inclure ces méthodes dans le IDataService. En fin de compte, j'ai simplement fait privé IDataService _dataService; en privé DataServiceNetworkHealth _dataService; Merci beaucoup!
OriginalL'auteur Brian Rasmussen
Si
LoadPortalStatus
n'est pas disponible dans l'interface (ou une méthode d'extension de l'interface), il ne peut pas être appelée à partir d'une instance de l'interface.Puisque vous définir:
Cela signifie que vous ne pouvez accéder à des choses dans
_dataService
déclaré dans leIDataService
(ou comme une extension de la méthode) de l'interface, indépendamment de ce que la mise en œuvre de cette interface.Si vos choix sont:
1) faire _dataService variable d'un type qui a
LoadPortalStatus
défini.2) ajouter
LoadPortalStatus
à laIDataService
interface.3) Créer une méthode d'extension pour
IDataService
appeléLoadPortalStatus
Une de celles-ci, même si 1 ou 2 serait probablement préférable, à mon avis.
OriginalL'auteur James Michael Hare
Pardonnez-moi si je suis stupide, mais il semble que vous n'avez pas de LoadPortalStatus() la méthode. Vous avez 2 x LoadChartItems ().
Copier coller de l'erreur?
Toute chance vous pourriez aussi poster le code de l'interface?
OriginalL'auteur KingCronus
Cela pourrait être trop évidente, mais pourriez-vous obtenir ce message, car vous n'avez pas réellement un
LoadPortalStatus
méthode dans votre code?Vous avez plusieurs
LoadChartItems
méthodes identiques signatures -- est-il possible que l'un d'eux est censé être leLoadPortalStatus()
méthode?OriginalL'auteur James Johnson