我有一个WinUI 3应用程序,我们使用Microsoft的Dependency-Injection。扩展,和包含DateTime的设置,当前的日期-时间格式已注册到服务集合,如下所示:
services.AddSingleton<IDateFormatService, DateFormatService>();
我只想将它注入到IValeConverter的构造函数中,但由于它是由XAML构造的,因此构造函数必须为空。
下面是我的电流转换器
public sealed class DateTimeFormatingConverter : DependencyObject, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value is not DateTime dateTime)
return value;
// return formatted dateTime based on settings formatting string
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
我知道其他注入库可以允许这样做,正如我在this post中看到的那样,我想知道Microsoft扩展版本是否存在类似的解决方案。
我知道有可能创建一个DependencyProperty,并在XAML中将其绑定到视图模型中的依赖注入属性。但是我正在研究这个方法,因为它将大大清理代码,同时还从转换器中删除了其他开发人员不容易知道的多个需求。
1条答案
按热度按时间hgc7kmma1#
我只想将它注入到IValeConverter的构造函数中,但由于它是由XAML构造的,因此构造函数必须为空。
正确。
XAML处理器引擎不知道如何使用
Microsoft.Extensions
来解析依赖项,因此,如果要将自己注册的构造函数依赖项注入转换器,则必须以编程方式构造转换器(而不是在XAML标记中定义它)。例如,您可以在注册依赖项后在
App.xaml.cs
中执行此操作,例如: