2

構成ファイルで serviceActivations を設定することにより、.svc ファイルを使用せずにサービスをホストできる WCF 4.0 の機能が気に入っています。デフォルトのサービス ファクトリを使用するとうまく機能しますが、依存関係が適切に注入されるように、AutofaServiceHostFactory を使用して同じことをしようとしています。私が試したすべてのシナリオで、サービスにアクセスしようとすると、まだこのエラーが発生しました。 WCF 用に構成されたサービス 'WCFAutofacWiring.MyService' は、Autofac コンテナーに登録されていません。空の asp.net Web サイトでサービスをホストしています。これが私がしたことです:

Web.config:

<serviceHostingEnvironment>
  <serviceActivations>
    <add factory="Autofac.Integration.Wcf.AutofacServiceHostFactory"
     relativeAddress="~/WASCurrentTime.svc"
     service="WCFAutofacWiring.MyService" />
  </serviceActivations>
</serviceHostingEnvironment>

次に、Autofac のドキュメント ( Autofac WcfIntegration )に記載されているように、 app_code フォルダーにファイルを配置して依存関係を登録し、サービスの開始時にコードが呼び出されることをデバッガーで確認しました。

public static class AppStart
{
    public static void AppInitialize()
    {
        AutofacHostFactory.Container = new AutofacBootstrapper().Configure();
    } 
}

最後に、ここに私の登録があります:

public class AutofacBootstrapper
{
    public IContainer Configure()
    {
        var builder = new ContainerBuilder();

        // register types 
        builder.Register<ILanguageProvider>(x => new MyLanguageProvider("en-US"));
        builder.RegisterType<MyService>();

        return builder.Build();
    }
}

私のサービスは、serviceActivation の代わりに .svc ファイルを使用すると完全に機能しますが、web.config で指定できるファクトリをセットアップすることが唯一の理由である場合、.svc ファイルを作成するのは無駄だと思います。

何か案が ?

ありがとう

4

1 に答える 1

5

Autofac のソースによると、(config からの) 指定された文字列を使用したキー付き解決、または指定Type.GetTypeされた文字列を使用した型指定された解決が失敗した場合、例外がスローされます。

あなたの場合、構成でa を指定していないため 、Type.GetTypeメソッドはおそらく返されます。nullType.AssemblyQualifiedName

typeof(MyService).AssemblyQualifiedNameそれを取得して構成に挿入してみてください。

于 2014-01-13T15:52:25.643 に答える