Как зарегистрировать маршруты, которые были определены вне Global.asax - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь реализовать шаблон, который введен этим вопросом

Принятый ответ предоставляет стратегию, в которой маршруты были определены в отдельном классе. У меня вопрос, как именно вызвать этот код из Global.asax.

ТНХ

Ответы [ 2 ]

1 голос
/ 05 января 2012

Позвольте мне показать вам, как вы можете зарегистрировать маршрут, который указан в любом месте проекта, если файл DLL, содержащий файл, находится в папке bin.

определить интерфейс

public interface IRegiserRoute
{
    void RegisterRoutes(RouteCollection routes);
}

Теперь скажите, что хотите зарегистрировать какой-нибудь маршрут где-то далеко в джунглях. Создайте класс и унаследуйте его от приведенного выше интерфейса.

public MyBlogRoutes : IRegiserRoute
{
    public void RegisterRoutes(RouteCollection routes)
    {
        //register your stuff here. 

    }

}

Теперь, как вызвать этот маршрут из файла global.asax. Загрузить все типы, которые унаследованы от IRegiserRoute (из Как найти все классы, реализующие данный интерфейс? )

var type = typeof(IRegiserRoute);
var types = AppDomain.CurrentDomain.GetAssemblies().ToList()
.SelectMany(a => a.GetTypes())
.Where(t => type.IsAssignableFrom(t))
select Activator.CreateInstance(t) as IRegiserRoute;

// Теперь регистрируем все ваши маршруты в любом месте в папке bin.

foreach (var t in types)
{
  t.RegisterRoutes(routes); 
}

Надеюсь, это должно помочь вам.

ура

* 1020 Parminder *
1 голос
/ 05 января 2012

См. другой ответ на тот же вопрос или, более конкретно, ссылка , указанная в этом ответе.

Все, что вам нужно сделать, это добавить экземплярот ExampleRoute до RouteCollection в global.asax.

    public static void RegisterRoutes(RouteCollection routes)
    {
        // ...other routes
        routes.Add(new ExampleRoute());
        // ...more routes
    }
...