Dependency Injection returning null value
I've created a WPF application that uses DI for the View/Viewmodel. I'm attempting to create a CS file to deal with the program logic that uses a dependency injected Service Wrapper. However, whenever I call the Service in the new class, the value is returning as null. I've included a shortened version below that hopefully gets the point across.
MyService.CS
MainWindow.xaml.cs
MainWindow.Xaml
MainViewModel.cs
App.xaml
App.Xaml.Cs
There is a lot more there, but they are all instantiated as singleton.
HomeView.xaml.Cs
And finally.
Logic.CS
MyService.CS
public class CustomWrapper : ICustomWrapper
{
public Connect () {}
public Disconnect () {}
}
public interface ICustomWrapper
{
public Connect(string);
public Disconnect();
}public class CustomWrapper : ICustomWrapper
{
public Connect () {}
public Disconnect () {}
}
public interface ICustomWrapper
{
public Connect(string);
public Disconnect();
}MainWindow.xaml.cs
public partial class MainWindow : Window
{
public static string radioParse {get; set;}
private readonly ICustomWrapper _customWrapper;
public MainWindow (ICustomWrapper customWrapper)
{
_customWrapper = customWrapper;
InitializeComponent();
}
public void Proceed_Click(object sender, RoutedEventArgs e)
{
var radioButton = Session.Children.OfType<RadioButton>()
.FirstOrDefault(r=> r.IsChecked.HasValue && r.IsChecked.Value);
if (radioButton == null)
MessageBox.Show("Select an Option");
else if (radioButton != null)
{
radioParse = "A"
SelectValue();
}
}
public void SelectValue();
{
_customWrapper.Connect(radioParse)
}public partial class MainWindow : Window
{
public static string radioParse {get; set;}
private readonly ICustomWrapper _customWrapper;
public MainWindow (ICustomWrapper customWrapper)
{
_customWrapper = customWrapper;
InitializeComponent();
}
public void Proceed_Click(object sender, RoutedEventArgs e)
{
var radioButton = Session.Children.OfType<RadioButton>()
.FirstOrDefault(r=> r.IsChecked.HasValue && r.IsChecked.Value);
if (radioButton == null)
MessageBox.Show("Select an Option");
else if (radioButton != null)
{
radioParse = "A"
SelectValue();
}
}
public void SelectValue();
{
_customWrapper.Connect(radioParse)
}MainWindow.Xaml
<StackPanel>
<Button Content = "Proceed"
Command = "{Binding Path=NavigateHomeCommand}
Click = "Proceed_Click"/>
</StackPanel><StackPanel>
<Button Content = "Proceed"
Command = "{Binding Path=NavigateHomeCommand}
Click = "Proceed_Click"/>
</StackPanel>MainViewModel.cs
private ICustomWrapper _customWrapper;
public RelayCommand NavigateHomeCommand
public MainViewModel(INavigationService navigationService, ICustomWrapper customWrapper)
{
NavigateHomeCommand = new RelayCommand (o=> {Navigation.NavigateTo<HomeViewModel>(); } o=> true;
}private ICustomWrapper _customWrapper;
public RelayCommand NavigateHomeCommand
public MainViewModel(INavigationService navigationService, ICustomWrapper customWrapper)
{
NavigateHomeCommand = new RelayCommand (o=> {Navigation.NavigateTo<HomeViewModel>(); } o=> true;
}App.xaml
<DataTemplate DataType = "{x:Type TypeName=viewModel:HomeViewModel}">
<view:HomeView/>
</DataTemplate><DataTemplate DataType = "{x:Type TypeName=viewModel:HomeViewModel}">
<view:HomeView/>
</DataTemplate>App.Xaml.Cs
public partial class App : Application
{
private readonly IServiceProvider _serviceProvider;
private readonly IService Collection services = new ServiceCollection();
{
public App
{
services = new ServiceCollection();
services.AddSingleton<MainWindow>(s =>
{
var window = new mainWindow(s.GetRequiredService<ICustomWrapper>());
window.DataContext = s.GetRequiredService<MainViewModel>();
return window;
});
services.AddSingleton<MainViewModel>();
services.AddSingleton<HomeViewModel>();
services.AddSingleTon<INavigationService, navigationService>();
services.AddSingleTon<ICustomWrapper, customWrapper>();
services.AddSingleton<Func<Type, ViewModelBase>>(serviceProvider => viewModelType => (ViewModelBase)serviceProvider.GetRequiredService(viewModelType));
_serviceProvider = services.BuildServiceProvider();
}
protected override void ONstartup(StartupEventArgs e)
{
MainWindow = _serviceProvider.GetRequiredService<MainWindow>();
MainWindow.Show();
base.OnStartup(e);
}public partial class App : Application
{
private readonly IServiceProvider _serviceProvider;
private readonly IService Collection services = new ServiceCollection();
{
public App
{
services = new ServiceCollection();
services.AddSingleton<MainWindow>(s =>
{
var window = new mainWindow(s.GetRequiredService<ICustomWrapper>());
window.DataContext = s.GetRequiredService<MainViewModel>();
return window;
});
services.AddSingleton<MainViewModel>();
services.AddSingleton<HomeViewModel>();
services.AddSingleTon<INavigationService, navigationService>();
services.AddSingleTon<ICustomWrapper, customWrapper>();
services.AddSingleton<Func<Type, ViewModelBase>>(serviceProvider => viewModelType => (ViewModelBase)serviceProvider.GetRequiredService(viewModelType));
_serviceProvider = services.BuildServiceProvider();
}
protected override void ONstartup(StartupEventArgs e)
{
MainWindow = _serviceProvider.GetRequiredService<MainWindow>();
MainWindow.Show();
base.OnStartup(e);
}HomeView.xaml.Cs
public partial HomeView : UserControl
{
private readonly ICustomWrapper _customWrapper;
private readonly MainWindow mainWindow;
public HomeView(ICustomWrapper customWrapper, MainWindow mainWindow)
{
_mainWindow = mainWindow
customWrapper = customWrapper
}
private HomeView()
{
InitializeComponent();
}
private void Button1_Click(object sender, RoutedEventArgs e)
{
Logic _logic = new Logic(_customWrapper, _mainWindow);
_logic.Select();
}
}public partial HomeView : UserControl
{
private readonly ICustomWrapper _customWrapper;
private readonly MainWindow mainWindow;
public HomeView(ICustomWrapper customWrapper, MainWindow mainWindow)
{
_mainWindow = mainWindow
customWrapper = customWrapper
}
private HomeView()
{
InitializeComponent();
}
private void Button1_Click(object sender, RoutedEventArgs e)
{
Logic _logic = new Logic(_customWrapper, _mainWindow);
_logic.Select();
}
}And finally.
Logic.CS
public class Logic
{
private readonly ICustomWrapper _customWrapper;
private readonly MainWindow _mainWindow
public string connectLetter = Mainwindow.radioParse;
public Logic(ICustomWrapper customWrapper, MainWindow mainWindow)
{
_MainWindow = mainWindow;
_customWrapper = customWrapper;
}
public void Select()
{
_customWrapper.Disconnect();
]public class Logic
{
private readonly ICustomWrapper _customWrapper;
private readonly MainWindow _mainWindow
public string connectLetter = Mainwindow.radioParse;
public Logic(ICustomWrapper customWrapper, MainWindow mainWindow)
{
_MainWindow = mainWindow;
_customWrapper = customWrapper;
}
public void Select()
{
_customWrapper.Disconnect();
]