我正在尝试在扩展方法类中使用CW注入存储库。
这是当前的天真实施:
public static class DateExtension
{
static readonly Dictionary<DateTime, Holiday> Dict;
static DateExtension()
{
Dict = new Dictionary<DateTime, Holiday>();
}
public static void SetHoliday(Holiday holidayToAdd)
{
Dict.Add(holidayToAdd.Date, holidayToAdd);
}
public static bool IsWorkingDay(this DateTime dateToCheck)
{
if (dateToCheck.DayOfWeek == DayOfWeek.Saturday ||
dateToCheck.DayOfWeek == DayOfWeek.Sunday)
{
return false;
}
return !Dict.ContainsKey(dateToCheck);
}
}
/// <summary>
/// This is the Holiday entity pulled from DB using NH or similar...
/// </summary>
public class Holiday
{
public virtual DateTime Date { get; set; }
public virtual string Description { get; set; }
}
要使用此功能,您必须将DateExtension填入假期第一
Holiday hol = new Holiday {Date = new DateTime(2012, 1, 2), Description = "NYD 2012"};
DateExtension.SetHoliday(hol);
所以你会像这样使用它:
DateTime dt = new DateTime(2012, 1, 2);
Debug.Assert(!dt.IsWorkingDay());
dt = dt.AddDays(1);
Debug.Assert(dt.IsWorkingDay());
现在,问题是,我怎么能很好地让CW将假期实例化为静态扩展,而不做这样的事情:
var holRep = _container.Resolve<IHolidayRepository>();
DateExtension.SetAllHolidays(holRep.All());
换句话说,只要在CW中注册静态类DateExtension并让它为我注入存储库,任何人都可以想到在CW中自动执行此操作的方法吗? (显然你不能在框中做到这一点,因此问题......而且我不想用IoC特定的东西来污染扩展类......)
提前致谢。