Как внедрить в расширения метода с помощью Castle Windsor? - PullRequest
0 голосов
/ 15 февраля 2012

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

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...