如何使用Castle Windsor注入方法扩展?

时间:2012-02-15 13:09:20

标签: c# dependency-injection castle-windsor extension-methods

我正在尝试在扩展方法类中使用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特定的东西来污染扩展类......)

提前致谢。

0 个答案:

没有答案