如何避免代码中的静态属性:
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时,我才想执行命令。