2017-03-01 3 views
0

Nancyと共にAutofacを使用する次のプログラムは、デフォルトのNancyサーバーを正しく起動しません。AutofacとNancy

using Autofac; 
using Nancy.Hosting.Self; 
using System; 

namespace NancyExample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var builder = new ContainerBuilder(); 
      builder.Register(c => new NancyHost(new Uri("http://localhost:8080"))).SingleInstance(); 

      using (var container = builder.Build()) 
      { 
       NancyHost host = container.Resolve<NancyHost>(); 

       // this fails with: 
       // Exception thrown: 'System.Net.HttpListenerException' in System.dll 
       // Exception thrown: 'System.Net.HttpListenerException' in System.dll 
       // Exception thrown: 'System.InvalidOperationException' in System.dll 
       // Exception thrown: 'System.InvalidOperationException' in System.dll 

       // this works: 
       // NancyHost host = new NancyHost(new Uri("http://localhost:8080")); 

       host.Start(); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 

NancyHostをAutofacで解決すると、.NETのHttpListenerにエラーが深刻なように見えます。この例外については、詳細がよくないようです。 http://localhost:8080を訪問すると、接続されません。

NancyHostをインスタンス化すると問題なく動作します。

使用:

  • をAutofac 4.3
  • ナンシー1.4.3
  • Nancy.Hosting.Self 1.4.1
+0

なぜあなたは 'NancyHost'をコンテナから解決しますか?コンテナをまったく使用していないのですか? – khellang

+0

また、なぜその呼び出しが 'HttpListener'に関連するもので失敗するのか分かりません。ナンシーは 'Start'を呼び出す前に' HttpListener'に触れません。 – khellang

+0

問題を示すためにユースケースを単純化しました。実際には、コンテナから構成を注入します。リストされたエラーは、実際にはStartが呼び出されたときのエラーです。 –

答えて

1

あなたのコードはConsole.ReadLine();に "待っている" とそれがあるのでusingの外には、Autofacコンテナは既に処分されています。 Console.ReadLine();usingの中に移動して機能させます。

+0

私はどのように愚かです!どうもありがとうございます。 –