从DelegateCommand继承而不使用静态属性

时间:2015-04-08 20:53:35

标签: c# wpf unity-container

如何避免代码中的静态属性:

public class RoleCommand : RoleBaseCommand, IRoleCommand
{
    #region Properties
    public static IUnityContainer Container { get; set; }
    public static IMitarbeiterRepository Repository { get; set; }
    public static IInformation Information { get; set; }


    #endregion

    #region Methods
    public RoleCommand(Action executeMethod, Func<bool> canExecuteMethod = null, string roleName = null,
        IUnityContainer container = null)
        : base(executeMethod, () => canExecuteMethod == null ? HasRecht() : HasRecht() && canExecuteMethod(), roleName)
    {
        if (executeMethod == null)
            throw new ArgumentNullException("executeMethod");

        if (!string.IsNullOrWhiteSpace(roleName) && container == null)
            throw new InvalidOperationException(
                "Der UnityContainer darf nicht null sein wenn der RoleName gefüllt ist.");

        if (string.IsNullOrWhiteSpace(roleName) && container != null)
            throw new InvalidOperationException(
                "Der RoleName darf nicht null sein wenn der IUnityContainer nicht null ist.");


        if (!string.IsNullOrWhiteSpace(roleName) && container != null)
        {
            Container = container;
            Repository = container.Resolve<IMitarbeiterRepository>();
            Information = container.Resolve<IInformation>();
        }
    }

    /// <summary>
    /// Gibt an ob der Mitarbeiter das Recht hat diese Aktion auszuführen.
    /// </summary>
    protected static bool HasRecht()
    {
        return Repository.HasMitarbeiterARoleWith(RoleName, Information.CurrentMitarbeiter);
    }
    #endregion
}

类RoleBaseCommand继承自WPF的Unity / Prism框架的DelegateCommand。我也使用依赖注入。

仅当HasRecht()方法返回true时,我才想执行命令。

0 个答案:

没有答案