पृष्ठभूमि
हाय सब तो दर्शकों प्रकार Microsoft.Practices.ServiceLocation.ActivationException के अपवाद हो रही है। मैं आमतौर पर एक एंड्रॉइड डेवलपर हूं, लेकिन अब मैं एक क्रॉस प्लेटफार्म एप्लिकेशन विकसित कर रहा हूं जो डब्ल्यूपीएफ और एंड्रॉइड को लक्षित करता है। ऐसा कहा जा रहा है कि व्यावहारिक रूप से कोई जानकारी नहीं है कि मैं जो चाहता हूं उसे सीधे कैसे करें। इसलिए, मैंने एक 3-भाग वाली ब्लॉग सीरीज़ को समाप्त कर दिया जो कि विंडोज-आधारित क्रॉस प्लेटफ़ॉर्म एमवीवीएम प्रोजेक्ट को विकसित करने के तरीके पर गहराई से चलता है। जब तक मैं पीसीएल को Xamarin.Android के साथ संगत होने के लिए सेट करता हूं, कोई भी कोड जो किसी त्रुटि को फेंक नहीं देता है, एक बार जब मैं एंड्रॉइड पक्ष में जाता हूं तो काम करना चाहिए। ब्लॉग पोस्ट के लिंक यहां दिए गए हैं: Blog 1, Blog 2, Blog 3। फिर, मैं एंड्रॉइड करता हूं, इसलिए मैं एक डब्ल्यूपीएफ एप्लीकेशन के लिए कोडिंग करने के लिए नया हूं।MVVM लाइट - पीसीएल + WPF -
अंक
तो मेरी मुद्दा आज केवल पीसीएल-WPF पक्ष जो ऊपर से जुड़े ब्लॉग पोस्ट से संबंधित है के साथ काम कर रहा है। मैंने पदों में जितनी अच्छी कोशिश की थी, उतनी ही अच्छी कोशिश की। ब्लॉग दो लक्षित प्लेटफार्मों के रूप में विनआरटी और विनफोन का उपयोग करता है, इसलिए मुझे डब्ल्यूपीएफ पर काम करने के लिए चीजों को समझने की कोशिश की गई। मुझे दो चीजों को करना था IsolatedStorage
का उपयोग करना और मूल रूप से WPF पक्ष बनाने के लिए WinPhone App.Xaml
का उपयोग करें।
मैंने ब्लॉग को अंत तक पूरा कर लिया है और सफलताओं का निर्माण किया है। मैं अपने उदाहरण डीबग लाइनों को भी देख सकता हूं जैसे कि यह तीसरे ब्लॉग पोस्ट के अंत में बात करता है।
ActivationException उपयोगकर्ता कोड से बिना क्रिया
प्रकार 'Microsoft.Practices.ServiceLocation.ActivationException' की एक अपवाद GalaSoft.MvvmLight.Extras में हुई थी: हालांकि, जब मैं इसे चलाने के लिए जाओ, मैं निम्नलिखित मिल .dll लेकिन उपयोगकर्ता कोड
$ अपवाद {Microsoft.Practices.ServiceLocation.ActivationException: कैश में नहीं मिला प्रकार: StackOverF.Services.IStorageService में प्रबंधित नहीं किया गया था। GalaSoft.MvvmLight.Ioc.SimpleIoc.DoGetService (टाइप टाइप टाइप, स्ट्रिंग कुंजी, बूलियन कैश) में c: \ MvvmLight \ Source \ GalaSoft.MvvmLight \ GalaSoft.MvvmLight.Extras (पीसीएल) \ Ioc \ SimpleIoc.cs: पंक्ति 537 GalaSoft.MvvmLight.Ioc.SimpleIoc.GetService (टाइप सर्विस टाइप टाइप) में सी: \ MvvmLight \ Source \ GalaSoft.MvvmLight \ GalaSoft.MvvmLight.Extras (पीसीएल) \ Ioc \ SimpleIoc.cs: लाइन 78 9 गैलासोफ्ट.एमवीवीएमलाइट पर। ग में Ioc.SimpleIoc.MakeInstanceTClass: \ MvvmLight \ स्रोत \ GalaSoft.MvvmLight \ GalaSoft.MvvmLight.Extras (PCL) \ Ioc \ SimpleIoc.cs: लाइन 729} {System.Exception Microsoft.Practices.ServiceLocation.ActivationException}
क्या कोई ऐसा चीज है जो आप मुझे बता सकते हैं कि शायद ब्लॉग लेखक ने मुझे छोड़ दिया है? पर्याप्त चट्टानों इस पर फेंक दिया जाता है हो सकता है कि अगर "बोल्डर," यह खुला दरार होगा ...
स्पष्टीकरण
वहाँ मूलतः वर्तमान में मेरे दृश्य स्टूडियो समाधान में केवल दो परियोजनाओं कर रहे हैं। एक पोर्टेबल क्लास लाइब्रेरी है। दूसरा डब्ल्यूपीएफ एप्लीकेशन है। बहुत निकट भविष्य में, एक बार जब मैं समीकरण के डब्ल्यूपीएफ पक्ष पर काम कर रहा हूं, तो मैं एंड्रॉइड प्रोजेक्ट में कोड का पुन: उपयोग करने के लिए एक्समेरिन में पीसीएल का उपयोग करूंगा। हालांकि, एंड्रॉइड साइड मेरी समस्या का हिस्सा नहीं है। जब मैं केवल WPF प्रोजेक्ट से निपट रहा हूं तो मुझे उपरोक्त समस्या है।
संहिता (अंतिम फ़र, 18, वर्ष 2016 संपादित)
IMainViewModel।सीएस
using GalaSoft.MvvmLight.Command;
using StackOverF.Models;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StackOverF.ViewModels {
public interface IMainViewModel {
ObservableCollection<Workload> Workload { get; }
RelayCommand RefreshCommand { get; }
RelayCommand AddCommand { get; }
}
}
MainViewModel.cs
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using StackOverF.Models;
using StackOverF.Services;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StackOverF.ViewModels {
public class MainViewModel : ViewModelBase,IMainViewModel {
private IDataService dataService;
public MainViewModel(IDataService dataService) {
this.dataService = dataService;
RefreshAsync();
}
private ObservableCollection<Workload> workload = new ObservableCollection<Workload>();
public ObservableCollection<Workload> Workload {
get {
return workload;
}
}
#region Commands
#region Refresh
private RelayCommand refreshCommand;
public RelayCommand RefreshCommand {
get {
return refreshCommand ?? (refreshCommand = new RelayCommand(async() => { await RefreshAsync();}));
}
}
private async Task RefreshAsync() {
workload.Clear();
foreach (Workload listing in await dataService.GetWorkloadAsync()) {
workload.Add(listing);
}
}
#endregion
#region Add
private RelayCommand addCommand;
public RelayCommand AddCommand {
get {
return addCommand ??
(addCommand = new RelayCommand(async() => {
Workload listing = new Workload() { Id = 3, Serial = "relay12" };
await dataService.AddWorkloadAsync(listing);
workload.Add(listing);
}));
}
}
#endregion
#endregion
}
}
LocatorService.cs (DeviceLocatorService, WPF परियोजना में स्थित)
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Ioc;
using Microsoft.Practices.ServiceLocation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StackOverF.Services {
public class DeviceLocatorService {
static DeviceLocatorService() {
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic) {
}
else {
}
if (!SimpleIoc.Default.IsRegistered<IStorageService>())
SimpleIoc.Default.Register<IStorageService, StorageService>();
}
public static void Cleanup() {
}
}
}
LocatorService.cs (LocatorService में स्थित पीसीएल परियोजना)
using Microsoft.Practices.ServiceLocation;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Ioc;
using StackOverF.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StackOverF.Services {
public class LocatorService {
static LocatorService() {
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
// Services
if (ViewModelBase.IsInDesignModeStatic) {
SimpleIoc.Default.Register<IDataService, Design.DataService>();
}
else {
SimpleIoc.Default.Register<IDataService, Services.DataService>();
}
// View Models
SimpleIoc.Default.Register<IMainViewModel, MainViewModel>();
}
public IMainViewModel MainViewModel {
get {
return ServiceLocator.Current.GetInstance<IMainViewModel>();
}
}
public static void Cleanup() {
}
}
}
return ServiceLocator.Current.GetInstance<IMainViewModel>();
लाइन पर यह त्रुटियां (केवल डिबगिंग केवल)।
App.xaml
<Application x:Class="StackOverF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
xmlns:services="clr-namespace:StackOverF.Services;assembly=StackOverF.PCL"
xmlns:deviceServices="clr-namespace:StackOverF.Services"
StartupUri="Views/MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<deviceServices:DeviceLocatorService x:Key="Locator.WPF" d:IsDataSource="True" />
<services:LocatorService x:Key="Locator" d:IsDataSource="True" />
</ResourceDictionary>
</Application.Resources>
</Application>
विंडोज़ के लिए डब्ल्यूपीएफ? मैं वास्तव में समझ नहीं पा रहा हूं कि आप किस प्लेटफॉर्म को लक्षित कर रहे हैं। – sexta13
यह क्रॉस प्लेटफ़ॉर्म है। मैं जिन दो प्लेटफार्मों के लिए विकास कर रहा हूं वह विंडोज़ और एंड्रॉइड के लिए डब्ल्यूपीएफ है ... एंड्रॉइड लॉल। पीसीएल में आपके पास "सार्वभौमिक" कोड है जिसे दो प्लेटफार्मों में साझा किया जा सकता है, जबकि प्लेटफार्म विशिष्ट कोड अपनी परियोजनाओं में है। –
@Steven_BDawg क्या आप अपना डिवाइस लॉकर सेवा दिखा सकते हैं? जैसा कि मैंने आईओसी कंटेनर में आईएसटीओरेज सेवा पंजीकृत नहीं है। – Valentin