2017-04-30 1 views
0

J'ai créé un contrôleur de table mobile:Intégration Autofac avec Microsoft Azure Mobile Services

[MobileAppController] 
[Authorize] 
public class EventOrganiserMembershipDtoController : TableController<EventOrganiserMembershipDto> 
{ 
    private readonly IModelContext _modelContext; 

    public EventOrganiserMembershipDtoController(IModelContext modelContext) 
    { 
     _modelContext = modelContext; 
    } 

    protected override void Initialize(HttpControllerContext controllerContext) 
    { 
     base.Initialize(controllerContext); 
     DomainManager = new EventOrganiserMembershipDomainManager((DbContext)_modelContext, controllerContext.Request); 
    } 
} 

Mais il n'accepte pas l'injection de dépendance, en dépit du fait que je l'ai établi dans mon projet.

Selon toutes les recherches que j'ai faites, pour accomplir cette tâche, qui devrait être trivialement facile, j'ai besoin de la ligne ServiceConfig.Initialize(new ConfigBuilder(options)). Mais je n'ai aucune idée d'où cette classe mythique est censée vivre. Est-il obsolète? Y a-t-il une nouvelle façon de faire cela?

Répondre

1

Vous n'avez pas besoin de l'appel ServiceConfig: Je présume que cela fait partie de l'infrastructure de serveur mobile héritée. Vous avez juste besoin de passer un conteneur dans l'échafaudage: ajouter un argument IContainer au code boilerplate

public static void ConfigureMobileApp(IAppBuilder app) 
    { 
     HttpConfiguration config = new HttpConfiguration(); 

     new MobileAppConfiguration() 
      .UseDefaultConfiguration() 
      .ApplyTo(config); 

     // Use Entity Framework Code First to create database tables based on your DbContext 
     Database.SetInitializer(new MobileServiceInitializer()); 

     MobileAppSettingsDictionary settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings(); 

     if (string.IsNullOrEmpty(settings.HostName)) 
     { 
      app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions 
      { 
       // This middleware is intended to be used locally for debugging. By default, HostName will 
       // only have a value when running in an App Service application. 
       SigningKey = ConfigurationManager.AppSettings["SigningKey"], 
       ValidAudiences = new[] { ConfigurationManager.AppSettings["ValidAudience"] }, 
       ValidIssuers = new[] { ConfigurationManager.AppSettings["ValidIssuer"] }, 
       TokenHandler = config.GetAppServiceTokenHandler() 
      }); 
     } 

     app.UseWebApi(config); 
    } 

et remplacer

HttpConfiguration config = new HttpConfiguration(); 

avec

var config = new HttpConfiguration 
{ 
    DependencyResolver = new AutofacWebApiDependencyResolver(container) 
}; 
+0

heureux d'apprendre que vous avez résolu ce problème. Vous pourriez marquer votre réponse comme une réponse acceptable qui pourrait aider d'autres membres de la communauté qui pourraient rencontrer ce problème similaire. –

+1

Encore 12 heures, et je peux le faire. C'est les règles de Stack Overflow. –