ここからヒントを得て、新しいWebApiプロジェクトのこの統合テストを考え出しました。残りのWebサービスを構築しようとしていますが、APIコンシューマーにリリースする予定のヘルパークライアントがあります。それExampleClientHelper
がそこにあるタイプです。ああ、ところで、これはすべてValuesController
、MVC4 Web Api Visual Studioプロジェクトのプロジェクトテンプレートで提供されるものにつながります-これを理解している間、私は物事を単純に保ちます。
ExampleClientHelper
前述の参照例のすべての要求/応答を置き換えます。内部でRestSharpを使用しています。
[Test]
[Ignore]
public void ValuesHelper_ShouldReturn_value1_And_value2_AsTypedObject()
{
// IoC prep
var builder = new ContainerBuilder();
var container = builder.Build();
// web server prep
var baseUri = new Uri("http://localhost:8080");
var config = new HttpSelfHostConfiguration(baseUri);
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
// yes, the routing needs to be copied over. it's not compatible with the MVC routes
config.Routes.MapHttpRoute("Api", "api/{controller}/{id}",
new { id = RouteParameter.Optional, namespaces = new[] { typeof(ValuesController).Namespace } });
// start the server and make a request
new HttpSelfHostServer(config)
.OpenAsync()
.ContinueWith(task =>
{
var client = new ExampleClientHelper(baseUri);
var values = client.GetValues();
// then test the response
Assert.AreEqual("value1", values.ElementAt(0));
Assert.AreEqual("value2", values.ElementAt(1));
})
.Wait();
}
上記のコードは、変更しない限り正常に機能しますValuesController
。すなわち。暗黙のパラメーターなしのコンストラクターが残っています。
私が抱えている問題はValuesController
、依存関係を要求するように変更すると、セルフホストサーバーがインスタンス化できないように見えることです。問題は、Autofac DependencyResolverを接続するかどうかに関係なく、ヘルパークライアントからの応答から同じ例外が発生することです。これは、応答のコンテンツで返されるものであり、RestSharpのおかげでJSONとして適切にフォーマットされています。
{"ExceptionType": "System.ArgumentException"、 "Message": "Type'Embed.ECSApi.RestServer.Controllers.ValuesController'にはデフォルトのコンストラクターがありません"、 "StackTrace":"atSystem.Linq.Expressions.Expression。 New(Type type)\ r \ n at System.Web.Http.Internal.TypeActivator.Create [TBase](Type instanceType)\ r \ n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request、HttpControllerDescriptor controllerDescriptor 、Type controllerType) "}
したがって、明らかにセルフホストサーバーは作成しようとしていますValuesController
が、作成できません。なんで?DependencyResolverを正しく配線したと思いました。代わりに、構成していない依存関係について文句を言うAutofac例外が発生することを期待しています。