c# - 通过标记扩展注入(inject)命令是一种好习惯吗?

标签 c# wpf mvvm dependency-injection markup-extensions

<分区>

我有一个自定义标记扩展,它使用依赖注入(inject)解析命令。这对我来说非常方便,因为我不必在 View 模型中创建命令并为它们绑定(bind)。 最近有人告诉我,在 mvvm 中使用这样的标记扩展不是一个好的做法,我应该避免这样做。是真的吗?

标记扩展代码:

public class InjectCommandExtension : MarkupExtension
{
    #region Props
    [ConstructorArgument("key")]
    public string Key { get; set; }
    #endregion

    #region ctor
    public InjectCommandExtension()
    {
    }

    public InjectCommandExtension(string key)
    {
        Key = key;
    }
    #endregion

    #region ProvideValue
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        if (Key == null)
            throw new ArgumentNullException("Key");

        return ServiceLocator.Current.GetInstance<ICommand>(Key);
    }
    #endregion
}

在 XAML 中使用:

<Button Content="Delete" Command="{mext:InjectCommand DeleteOrderCommand}"/>

最佳答案

如果我们以这种一般方式说话,我个人不认为自定义标记注入(inject)。 我唯一可以抗拒的是你应该延迟的复杂性。让它们在 XAML 中贴标可帮助您和组中的其他开发人员避免造成困惑。

祝你好运。

关于c# - 通过标记扩展注入(inject)命令是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9061015/

相关文章:

c# - Unregister(this) 从所有内容中取消注册此实例?

c# - MVVM 模式 - 可以将 UI 相关数据放入模型中吗?

c# - 如何在 .NET Core 的 Startup 类构造函数中访问 AppSettings

c# - 仅用于 ListViewItem 的上下文菜单

c# - 指定(或不指定)键时的模板加载行为不同

c# - 如果设置了 ItemContainerStyle,则 DataTemplateSelector 不起作用

c# - MVVM - 通过双击选择列表框中的项目并加粗

c# - 将 windows phone 7 proj 转换为 win mobile 6.5?

c# - WebAPI : Get controller object from System. Web.Http.Filters.ActionFilterAttribute

c# - 如何使用 Protobuf.net 更改类型成员的 ProtoMember 索引?