2016-02-21 5 views
0

В настоящее время я работаю над сайтом Nancy, который состоит из двух частей. Один для конечных пользователей шрифтов, а другой - для администраторов. Оба типа пользователей имеют разные страницы входа, где /login позволяет только конечным пользователям войти в систему, а admin/login разрешает только администраторам.Различные реализации IUserMapper для разных модулей - NancyFx

Что я хочу иметь, это разные реализации интерфейса IUserMapper. Я хочу, чтобы он был разрешен до UserMapper, когда вызывается /login и AdminMapper, когда вызывается маршрут . UserMapper и AdminMapper классов приведены ниже:

public class UserMapper: IUserMapper{ 
    //IUserMapper implementation 
} 
public class AdminMapper: IUserMapper{ 
//IUserMapper implementation 
} 

Я следующий код для формы авторизации в RequestStartup методе

var formsAuthConfiguration = new FormsAuthenticationConfiguration() 
       { 
        RedirectUrl = "~/login", 
        CryptographyConfiguration = CustomCryptographyConfiguration.Default, 
        UserMapper = container.Resolve<IUserMapper>() 
       }; 

       FormsAuthentication.Enable(pipelines, formsAuthConfiguration); 

Как я могу сказать, Нэнси карту IUserMapper к UserMapper, когда /login называется и AdminMapper когда это /admin/login называется.

ответ

0

Это должно быть выполнено самостоятельно. В Нэнси нет механика, который мог бы знать, как обращаться с этим автоматически.

Когда вы подключаете свою аутентификацию форм и назначаете свойство UserMapper, из , то вы не можете ее устранить из контейнера.

Вам необходимо создать соответствующий экземпляр IUserMapper по запросу, на основе запрошенного маршрута. Вы можете получить запрошенный маршрут из объекта NancyContext, который передается в ваш метод RequestStartup.