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");
});