2009-06-08 84 views
2

如何在请求对象时如何配置Castle Windsor以将Initialize方法用于静态辅助类?我试图添加一些扩展方法HtmlHelper,所以它必须是一个静态类和方法。我的HtmlHelper分机取决于已配置Castle Windsor的IHtmlHelpersService。我正在使用Convention Over Configuration。IoC(Castle Windsor)和Static Helpers

编辑 我想我要的是ComponentActivatorUsingFactory。我以这种方式走向死胡同吗?

回答

1

我想你的意思是Convention over configuration

我不知道有什么办法来做你的建议。这有点冒险,但你总是可以创建一个非静态的类来符合接口,并且只需执行你需要的静态方法。有时候这种类型的东西在使用第三方项目时是必要的罪恶。当然,如果你贡献了城堡项目静态支持的补丁,他们可能会接受它

+0

卫生署,是啊。我修好了它。 – 2009-06-08 15:17:26

0

我不认为国际奥委会可以帮助您与静态类,温莎(或任何其他国际奥委会的这个问题)需要的东西,它可以实例化(调用构造函数)。

你是不是想换出辅助方法取决于配置? 如果是这样,也许你可以编写一组调用IoC实现的扩展方法。

0

另一种选择,是创造所有ViewPages的基类。隐藏现有的HtmlHelper财产与自己的版本:

public class MyHtmlHelper : HtmlHelper 
{ 
    // Take helper service, implement special methods 
} 

public class MyViewPage : ViewPage 
{ 
    protected new MyHtmlHelper HtmlHelper { get; set; } 
    // Wire up HtmlHelper as appropriate -- which is not going to be easy since 
    // the base property could be set at any time. 
} 

现在所有视图页面会使用您的特殊MyHtmlHelper所有您特制的酱汁,他们甚至都不需要是扩展方法。一种变体是让您的MyHtmlHelper公开该服务并继续编写定位该帮助程序的扩展方法。

适应静态类:

有时某个应用程序将相关功能集成到一类的静态函数:

static class IdGenerator 
{ 
    static int _next = 0; 
    public static int GetNext() 
    { 
    return ++_next; 
    } 
} 

这种

-1

您可以用这种方法从这里http://code.google.com/p/autofac/wiki/ExistingApplications采取重构的设计通常在使用依赖注入创建的应用程序中没有位置。

相反,创建提供相同功能的接口:

interface IIdGenerator 
{ 
    int GetNext(); 
} 

和使用静态方法的实现适配器类:

class IdGeneratorAdapter : IdGenerator 
{ 
    public int GetNext() 
    { 
    return IdGenerator.GetNext(); 
    } 
} 
+0

这不回答我的问题。 – 2012-05-25 13:02:20