Я пытаюсь использовать 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 ...)
Заранее спасибо.