MVVM Light SimpleIoC 找不到实例
MVVM Light SimpleIoC can't find instance
我正在使用 WPF MVVM Light SimpleIoC 来实现对我的服务的访问。我在注册和使用我的 VM 时没有任何问题,但是当我注册服务时,我无法使用它。
有我的代码:
public interface IDeviceDataAccessService
{
List<Models.Device> GetDevices();
bool InsertDevice(ref Models.Device device, int userId);
bool RemoveDevice(Models.Device device);
}
实施:
public class DeviceDataAccessService : DataAccesBase, IDeviceDataAccessService
{
public DeviceDataAccessService(string connectionString) : base(connectionString)
{
}
...
}
ViewModelLocator
SimpleIoc.Default.Register<IDeviceDataAccessService, DeviceDataAccessService>();
并在代码中使用
SimpleIoc.Default.GetInstance<IDeviceDataAccessService>();
当我为 `TestViewModel' 更改 IDeviceDataAccessService
时,我没有遇到任何问题。但是我不能使用我的服务。
Message = "Exception has been thrown by the target of an invocation."
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[]
arguments, Signature sig, Boolean constructor)\r\n
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,
Object[] parameters, Object[] arguments)\r\n
at System.Delegate.DynamicInvokeImpl(Object[] args)\r\n
at GalaSoft.MvvmLight.Ioc.SimpleIoc.DoGetService(Type serviceType, String
key, Boolean cache) in C:\Users\lbugn\Documents\MVVMLight\GalaSoft.MvvmLight\GalaSoft.MvvmLight.Extras (PCL)\Ioc\SimpleIoc.cs:line 622\r\n
at GalaSoft.MvvmLight.Ioc.SimpleIoc.GetInstance[TService]() in C:\Users\lbugn\Documents\MVVMLight\GalaSoft.MvvmLight\GalaSoft.MvvmLight.Extras (PCL)\Ioc\SimpleIoc.cs:line 1059\r\n
at LabDesk.ViewModel.MainViewModel..ctor() in C:\Users\kzrostek\Documents\Git repo\labdesk\LabDESK\LabDesk\ViewModel\MainViewModel.cs:line 141"
内部异常
{"Type not found in cache: System.String."}
我忘记了你是如何注册连接字符串的,但我认为你的错误是说 deviceaccesservice 的构造函数:
public DeviceDataAccessService(string connectionString)
需要一个连接字符串作为参数。
它没有那个给它所以......崩溃。
我认为您需要更多类似的东西:
SimpleIoc.Default.Register<IDeviceDataAccessService>(() => {
return new DeviceDataAccessService("Whatever connectionstring should be");
});
我正在使用 WPF MVVM Light SimpleIoC 来实现对我的服务的访问。我在注册和使用我的 VM 时没有任何问题,但是当我注册服务时,我无法使用它。
有我的代码:
public interface IDeviceDataAccessService
{
List<Models.Device> GetDevices();
bool InsertDevice(ref Models.Device device, int userId);
bool RemoveDevice(Models.Device device);
}
实施:
public class DeviceDataAccessService : DataAccesBase, IDeviceDataAccessService
{
public DeviceDataAccessService(string connectionString) : base(connectionString)
{
}
...
}
ViewModelLocator
SimpleIoc.Default.Register<IDeviceDataAccessService, DeviceDataAccessService>();
并在代码中使用
SimpleIoc.Default.GetInstance<IDeviceDataAccessService>();
当我为 `TestViewModel' 更改 IDeviceDataAccessService
时,我没有遇到任何问题。但是我不能使用我的服务。
Message = "Exception has been thrown by the target of an invocation."
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[]
arguments, Signature sig, Boolean constructor)\r\n
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,
Object[] parameters, Object[] arguments)\r\n
at System.Delegate.DynamicInvokeImpl(Object[] args)\r\n
at GalaSoft.MvvmLight.Ioc.SimpleIoc.DoGetService(Type serviceType, String
key, Boolean cache) in C:\Users\lbugn\Documents\MVVMLight\GalaSoft.MvvmLight\GalaSoft.MvvmLight.Extras (PCL)\Ioc\SimpleIoc.cs:line 622\r\n
at GalaSoft.MvvmLight.Ioc.SimpleIoc.GetInstance[TService]() in C:\Users\lbugn\Documents\MVVMLight\GalaSoft.MvvmLight\GalaSoft.MvvmLight.Extras (PCL)\Ioc\SimpleIoc.cs:line 1059\r\n
at LabDesk.ViewModel.MainViewModel..ctor() in C:\Users\kzrostek\Documents\Git repo\labdesk\LabDESK\LabDesk\ViewModel\MainViewModel.cs:line 141"
内部异常
{"Type not found in cache: System.String."}
我忘记了你是如何注册连接字符串的,但我认为你的错误是说 deviceaccesservice 的构造函数:
public DeviceDataAccessService(string connectionString)
需要一个连接字符串作为参数。 它没有那个给它所以......崩溃。 我认为您需要更多类似的东西:
SimpleIoc.Default.Register<IDeviceDataAccessService>(() => {
return new DeviceDataAccessService("Whatever connectionstring should be");
});