我已经花费了两个多星期的时间在谷歌,必应,Stack Overflow和MSDN文档上搜索,试图找出如何对我正在开发的移动应用程序进行正确的依赖注入。需要澄清的是,我每天都会在Web应用程序中进行DI。我不需要关于什么、谁以及为什么DI很重要的速成课程。我知道它很重要,并且一直在接受它。
我需要理解的是,在移动应用程序世界中以及特别是UWP Template 10 Mobile应用程序中,这是如何工作的。
以前,我可以在.net/Asp应用程序中的App_Start.ConfigureServices中注册类型(new XYZ)。Singleton() blah” {请原谅语法;只是一个例子}。在.netcore中,这几乎相同,尽管有一些语法变化。
我的问题现在是,我正在尝试提供我的API给需要处理我的IXYZ服务的UWP应用程序。我绝对不认为他们应该每次都“new”出一个实例。必须有一种方法将其注入到UWP端的容器中;而我感觉我在这个过程中错过了一些非常简单的东西。
这是我拥有的代码:
App.xaml.cs
public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args)
{
// TODO: add your long-running task here
//if (args.Kind == ActivationKind.LockScreen)
//{
//}
RegisterServices();
await NavigationService.NavigateAsync(typeof(Views.SearchCompanyPage));
}
public static IServiceProvider Container { get; private set; }
private static void RegisterServices()
{
var services = new ServiceCollection();
services.AddSingleton<IXYZ, XYZ>();
Container = services.BuildServiceProvider();
}
MainPage.xaml.cs:
public MainPage()
{
InitializeComponent();
NavigationCacheMode = NavigationCacheMode.Enabled;
}
MainPageViewModel:
public class MainPageViewModel : ViewModelBase
{
private readonly IXYZ _xyz;
public MainPageViewModel(IXYZ xyz)
{
//Stuff
_xyz= xyz;
}
}
我现在遇到了错误: XAML MainPage...无法构建ViewModel类型。为了能够在XAML中被构造,一个类型不能是抽象的、嵌套的泛型接口或结构体,并且必须有一个公共的默认构造函数。 我愿意使用任何品牌的IoC容器,但我需要一个如何在UWP应用程序中正确使用DI的示例。99.9%关于DI的问题都是关于视图的(例如Prism?),而不仅仅是简单的服务DI(例如DataRepo;又称API/DataService)。
再次强调,我感觉自己缺少一些显而易见的东西,需要在正确的方向上得到帮助。可以有人给我展示一个示例项目、基本代码或基础教程,或者请不要抨击我如何不成为一个程序员...请不要这样做(我不知道我的自尊心是否能承受)。