XAML WinUI 3.使用Microsoft.Extensions.DependencyInjection在IValueConverter中进行依赖项注入

polhcujo  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(204)

我有一个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中将其绑定到视图模型中的依赖注入属性。但是我正在研究这个方法,因为它将大大清理代码,同时还从转换器中删除了其他开发人员不容易知道的多个需求。

hgc7kmma

hgc7kmma1#

我只想将它注入到IValeConverter的构造函数中,但由于它是由XAML构造的,因此构造函数必须为空。
正确。
XAML处理器引擎不知道如何使用Microsoft.Extensions来解析依赖项,因此,如果要将自己注册的构造函数依赖项注入转换器,则必须以编程方式构造转换器(而不是在XAML标记中定义它)。
例如,您可以在注册依赖项后在App.xaml.cs中执行此操作,例如:

this.Resources.Add("myConverter", 
    services.GetRequiredService<DateTimeFormatingConverter>());

相关问题