2012-10-31 2 views
1

Je suis en train d'essayer de faire fonctionner ça.WCF et Autofac avec Services Extensionless

Je veux qu'Autofac gère mes services WCF et utilise des services sans extension.

Des idées pour lesquelles cela ne fonctionne pas?

namespace SAIF.Services.WCF.Host 
{ 
    using System; 
    using System.ServiceModel.Activation; 
    using System.Web; 
    using System.Web.Routing; 
    using Autofac; 
    using Autofac.Integration.Wcf; 
    using SAIF.Core.Domain; 
    using SAIF.Core.Domain.Model; 
    using SAIF.Repositories; 
    using SAIF.Services.WCF.Core; 
    using SAIF.Services.WCF.Services; 

    public class Global : HttpApplication 
    { 
     protected void Application_Start(object sender, EventArgs e) 
     { 
      // Create Routes 
      var factory = new AutofacServiceHostFactory(); 
      RouteTable.Routes.Add(new ServiceRoute("FileService", factory, typeof(SAIF.Services.WCF.Core.IFileService))); 
      RouteTable.Routes.Add(new ServiceRoute("WebContext", factory, typeof(SAIF.Services.WCF.Core.IWebContextService))); 

      // Autofac Config 
      var builder = new ContainerBuilder(); 

      builder.Register(x => new EFUnitOfWork()) 
       .As<EFUnitOfWork>() 
       .As<IUnitOfWork>(); 

      builder.RegisterGeneric(typeof(Repository<>)) 
       .As(typeof(IRepository<>)); 

      builder.Register(x => new FileService()) 
       .As<IFileService>(); 

      builder.Register(x => new WebContextService(x.Resolve<IRepository<WebContextItem>>(), x.Resolve<IUnitOfWork>())) 
       .As<IWebContextService>(); 

      AutofacHostFactory.Container = builder.Build(); 
     } 
    } 
} 
+0

êtes-vous en mesure d'étape t Hrough? des erreurs? Qu'y a-t-il dans le conteneur à la fin? – EdmundYeung99

+0

Tout semble bien quand on le traverse. CoNtainer construit, les inscriptions sont là, juste le code ne fonctionne pas! – Sam

Répondre

1

Je ne suis pas sûr si la méthode Application_Start du Global.asax est appelé par WAS dans IIS.

This SO answer semble être similaire à ce que vous recherchez et des liens vers this blog post

Mettre en œuvre une méthode AppInitialize et le mettre dans le dossier App_Code.

public class InitialiseService 
{ 
    /// <summary> 
    /// AppInitialize method to register the IOC container. 
    /// </summary> 
    public static void AppInitialize() 
    { 
     // Create Routes 
     var factory = new AutofacServiceHostFactory(); 
     RouteTable.Routes.Add(new ServiceRoute("FileService", factory, typeof(SAIF.Services.WCF.Core.IFileService))); 
     RouteTable.Routes.Add(new ServiceRoute("WebContext", factory, typeof(SAIF.Services.WCF.Core.IWebContextService))); 

     // Autofac Config 
     var builder = new ContainerBuilder(); 

     //...the rest of your code... 
    } 
} 

Another SO answer parle de l'utilisation ServiceHostFactory plutôt que WebServiceHostFactory.

Pouvez-vous essayer d'utiliser cela au lieu de l'AutofacServiceHostFactory?

Mise à jour

Ceci est une vieille question/réponse, mais j'ai depuis essayé en suivant les instructions relatives à la documentation Autofac

voir https://code.google.com/p/autofac/wiki/WcfIntegration#WAS_Hosting_Extensionless_Services

Une partie clé de sans extension routage est d'ajouter le UrlRoutingModule

+0

Application_Start se fait virer ... Toujours perplexe. – Sam

+0

vrai, mais pouvez-vous essayer d'initialiser des choses ici? – EdmundYeung99

+0

Oui, et cela fonctionne dans le sens où le conteneur est construit. – Sam