2017-09-12 1 views
1

Ich habe gerade angefangen, Apps mit WPF und Unity aus einer großen Quelle zu erstellen, die die MVVM-Architektur implementiert. Ich habe es fast identisch verfolgt und den Quellcode überprüft, den sie benutzt haben und alles ist fast identisch. Ich habe eine Klasse ContainerHelper Klasse erstellt:Unity CS0308 Fehler

private static IUnityContainer _container; 
     static ContainerHelper() 
     { 
      _container = new UnityContainer(); 
      _container.RegisterType<IEmployeesRepository, EmployeesRepository>(
       new ContainerControlledLifetimeManager()); 
     } 

     public static IUnityContainer Container 
     { 
      get { return _container; } 
     } 

Und ich habe eine Klasse EmployeeListViewModel erstellen:

privaten IEmployeesRepository _repo;

public EmployeeListViewModel(IEmployeesRepository repo) 
{ 
    _repo = repo; 
    EditEmployeeCommand = new RelayCommand<Employees>(OnEditEmployee); 
    AddEmployeeCommand = new RelayCommand(OnAddEmployee); 
    ClearSearchCommand = new RelayCommand(OnClearSearch); 
} 

private string _SearchInput; 

public string SearchInput 
{ 
    get { return _SearchInput; } 
    set 
    { 
     SetProperty(ref _SearchInput, value); 
     FilterEmployee(_SearchInput); 
    } 
} 

private void FilterEmployee(string searchInput) 
{ 
    if (string.IsNullOrWhiteSpace(searchInput)) 
    { 
     Employees = new ObservableCollection<Employees>(_allEmployees); 
    } 
    else 
    { 
     Employees = new ObservableCollection<Employees>(_allEmployees.Where(e => e.FullName.ToLower().Contains(searchInput.ToLower()))); 
    } 
} 

private void OnClearSearch() 
{ 
    SearchInput = null; 
} 

private void OnEditEmployee(Employees emp) 
{ 
    EditEmployeeRequest(emp); 
} 

private void OnAddEmployee() 
{ 
    AddEmployeeRequested(new Employees { Id = Guid.NewGuid() }); 
} 

public event Action<Employees> AddEmployeeRequested = delegate { }; 
public event Action<Employees> EditEmployeeRequest = delegate { }; 

private ObservableCollection<Employees> _Employees; 
public ObservableCollection<Employees> Employees 
{ 
    get { return _Employees; } 
    set { SetProperty(ref _Employees, value); } 
} 

private List<Employees> _allEmployees; 
public async void LoadEmplooyees() 
{ 
    _allEmployees = await _repo.GetEmployeesAsync(); 
    Employees = new ObservableCollection<Employees>(_allEmployees); 
} 

public RelayCommand<Employees> EditEmployeeCommand { get; private set; } 
public RelayCommand AddEmployeeCommand { get; private set; } 
public RelayCommand ClearSearchCommand { get; private set; } 

}

Und das ist die Codezeile, die Implementierung und das Bestehen der EmployeeListViewModel der ContainerHelper-Klasse:

private EmployeeListViewModel _EmployeeListViewModel; 
_EmployeeListViewModel = ContainerHelper.Container.Resolve<EmployeeListViewModel>(); 

Ich verstehe nicht, warum ich eine nicht-generische Methode bekommen Fehler beim Verwenden von IUnityContainer.Resolve (type, sring, params ResolverOverride []) kann nicht mit Typargumenten verwendet werden.

Ich möchte mehr über diesen Fehler verstehen und was ich tun kann, um es zu beheben ... Ich habe an verschiedenen Stellen nach einer Antwort gesucht.

+0

@ mm8 hatte ich bemerkt, nur, dass ich nicht die Richtlinie für die Einheit hinzugefügt habe. Vielen Dank für diese Hilfe. Ich verstehe nicht, warum VS das Problem nicht lösen konnte. VS wusste, dass ich versuchte, auf die IUnity-Klasse zuzugreifen, schlug aber nie vor, die Direktive hinzuzufügen. Ich danke dir sehr. –

Antwort

1

Fügen Sie die folgende using Direktive am Anfang der Codedatei, in der Sie die generische Resolve Methode anrufen:

using Microsoft.Practices.Unity; 
+0

Dies ist eine Lektion, die gelernt wurde, um sicherzustellen, dass alle using-Anweisungen zur Datei hinzugefügt werden. Wir sehen nicht immer einen Hinweis auf diese Art von Fehlern. –