1

これを機能させるのにかなりの時間を費やしています。

Autofac で WCF サービスを管理し、拡張機能のないサービスを使用したいと考えています。

これが機能しない理由はありますか?

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();
        }
    }
}
4

1 に答える 1

1

Global.asax の Application_Start メソッドが IIS の WAS によって呼び出されるかどうかはわかりません。

このSOの回答は、探しているものとこのブログ投稿へのリンクに似ているようです

AppInitialize メソッドを実装し、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...
   }
}

もう 1 つの SO 回答では、 WebServiceHostFactoryではなくServiceHostFactoryの使用について説明しています。

AutofacServiceHostFactory の代わりにそれを使ってみることはできますか?

アップデート

これは古い質問/回答ですが、Autofac ドキュメントの指示に従ってみました。

https://code.google.com/p/autofac/wiki/WcfIntegration#WAS_Hosting_Extensionless_Servicesを参照してください

拡張機能のないルーティングの重要な部分は、UrlRoutingModule を追加することです

于 2012-10-31T20:25:30.733 に答える