2009-06-08 4 views
2

Как настроить Castle Windsor для использования метода Initialize для статического вспомогательного класса при запросе объекта? Я пытаюсь добавить некоторые методы расширения HtmlHelper, поэтому он должен быть статическим классом и методом. Мои HtmlHelper расширения зависят от IHtmlHelpersService, который уже настроен с помощью Castle Windsor. Я использую Console Over Configuration.IoC (Castle Windsor) и статические помощники

Редактировать Я думаю, что я хочу это ComponentActivator или UsingFactory. Я иду в тупик таким образом?

ответ

1

Возможно, вы имеете в виду Convention over configuration?

Я не знаю, как это сделать. Это немного хаки, но вы всегда можете создать класс, который не является статичным, который соответствует интерфейсу и просто выполняет статические методы, в которых вы нуждаетесь. Иногда этот тип вещи является необходимым злом при использовании стороннего проекта. Конечно, если вы внесли исправления для статической поддержки проекта Castle, они могут принять его

+0

Doh, да. Я починил это. –

0

Я не думаю, что IoC может помочь вам со статическими классами, Windsor (или любой другой IoC в этом отношении) нуждается в чем-то, что он может создать экземпляр (вызвать конструктор).

Вы пытаетесь заменить вспомогательные методы в зависимости от конфигурации? Если да, возможно, вы могли бы написать один набор методов расширения, которые вызывают 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 выставлял службу и продолжал писать методы расширения, предназначенные для этого помощника.

-1

Вы можете реорганизовать таким образом, взяты из здесь http://code.google.com/p/autofac/wiki/ExistingApplications:

Адаптировать Статический класс:

Иногда приложение будет связанная с ним группа функциональность в классе статических функций:

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

Этот вид дизайна обычно не имеет места в приложении, создаваемом с использованием инъекции зависимостей.

Вместо этого можно создать интерфейс, который обеспечивает ту же функциональность:

interface IIdGenerator 
{ 
    int GetNext(); 
} 

И исполнительный класс адаптера, который использует статические методы:

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

это не отвечает на мой вопрос. –

Смежные вопросы