2015-10-01 2 views
1

Я пытаюсь зарегистрировать AuthProvider из плагина.Как зарегистрировать AuthFeature из плагина?

public class Plugin : IPlugin 
{ 
    public void Register(IAppHost appHost) 
    { 
     appHost.Plugins.Add(new AuthFeature(
      () => new AuthUserSession(), 
      new IAuthProvider[] { 
       new CredentialsAuthProvider(), 
      } 
     )); 
     appHost.GetContainer().Register<ICacheClient>(new MemoryCacheClient()); 
     var userRep = new InMemoryAuthRepository(); 
     appHost.GetContainer().Register<IUserAuthRepository>(userRep); 
    } 
} 

Плагин успешно загружен, но когда я открываю конечную точку в веб-браузере, я получаю сообщение об ошибке:

The AuthService must be initialized by calling AuthService.Init to use an authenticate attribute 

ответ

2

Плагины должны быть зарегистрированы , прежде чем они загружены, которые вы можете сделать в конструктор или путем реализации IPreInitPlugin interface to run custom logic до плагинов загружены, например:

public class Plugin : IPlugin, IPreInitPlugin 
{ 
    public void Configure(IAppHost appHost) 
    { 
     appHost.Plugins.Add(new AuthFeature(
      () => new AuthUserSession(), 
      new IAuthProvider[] { 
       new CredentialsAuthProvider(), 
      } 
     )); 
    } 

    public void Register(IAppHost appHost) 
    { 
     appHost.GetContainer().Register<ICacheClient>(new MemoryCacheClient()); 
     var userRep = new InMemoryAuthRepository(); 
     appHost.GetContainer().Register<IUserAuthRepository>(userRep); 
    } 
} 

альтернативный API для загрузки зависит плагины в регистрации плагина является использование LoadPlugin API, например:

public class Plugin : IPlugin 
{ 
    public void Register(IAppHost appHost) 
    { 
     appHost.GetContainer().Register<ICacheClient>(new MemoryCacheClient()); 
     var userRep = new InMemoryAuthRepository(); 
     appHost.GetContainer().Register<IUserAuthRepository>(userRep); 

     appHost.LoadPlugin(new AuthFeature(
      () => new AuthUserSession(), 
      new IAuthProvider[] { 
       new CredentialsAuthProvider(), 
      } 
     )); 
    } 
} 
+0

Я пытался сделать это, как предложено в этой статье: https://github.com/ServiceStack/ServiceStack/wiki/Modularizing-services - поиск комментария: «Плагины, зависящие от нагрузки» – smokeing

+1

@ smokeing, если вы хотите сделать это, вам нужно вызвать 'LoadPlugin()' API as-is. – mythz

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