我花了两个多星期的时间搜索 google、bing、stackoverflow 和 msdn 文档,试图找出如何为我正在开发的移动应用程序进行正确的依赖项注入。需要明确的是,我每天都在网络应用程序中进行 DI。我不需要关于什么、谁以及为什么 DI 重要的速成课程。我知道它是,并且我总是拥抱它。
我需要了解的是它在移动应用程序世界中如何工作,特别是 UWP Template 10 移动应用程序。
从我过去的经历来看,在 .net/Asp 应用程序中,我可以“RegisterType(new XYZ).Singleton() blah”{请原谅语法;只是 App_Start.ConfigureServices 中的一个示例}。这在 .netcore 中的工作原理几乎相同,只是进行了一些语法更改。
我的问题是现在我试图将我的 api 提供给需要消化我的 IXYZ 服务的 UWP 应用程序。我绝不认为他们应该每次都“新建”一个实例。必须有一种方法将其注入到 UWP 端的容器中;我觉得我错过了一些东西very过程简单。
这是我的代码:
应用程序.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;
}
主页视图模型:
public class MainPageViewModel : ViewModelBase
{
private readonly IXYZ _xyz;
public MainPageViewModel(IXYZ xyz)
{
//Stuff
_xyz= xyz;
}
}
我现在收到错误:无法构造 XAML MainPage...ViewModel 类型。为了在 XAML 中构造,类型不能是抽象、接口嵌套泛型或结构,并且必须具有公共默认构造函数。
我愿意使用任何品牌的 IoC 容器,但我需要的是如何在 UWP 应用程序中正确使用 DI 服务的示例。关于 DI 的 99.9% 的问题都与视图(即 Prism?)有关,而不仅仅是服务的简单 DI(即 DataRepo;又名 API/DataService)。
再次,我觉得我错过了一些明显的东西,需要朝正确的方向推动。有人可以向我展示一个示例项目、基本代码或关于我不应该成为一名程序员的基本鞭打吗?请不要这样做(我不知道我的自尊心是否可以接受)。