OWIN-Startupクラスを使用してそれ自体を構成する単純なアプリケーションがあります。しかし、私はそれを働かせることができません!ここに私の構成は次のとおりです。OWINベースのASP.NET WebAPIでDryIOCを使用しても動作しません
public void Configuration(IAppBuilder appBuilder) {
var httpConfiguration = new HttpConfiguration();
httpConfiguration.Routes.MapHttpRoute(
name: "default_api_versioned_by_areas",
routeTemplate: "api/{area}/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var container = new Container();
// registering my services. They're all good....
container.WithWebApi(
httpConfiguration, new[] {GetType().Assembly});
container.RegisterWebApiControllers(
httpConfiguration, new[] { GetType().Assembly });
appBuilder.UseDryIocWebApi(httpConfiguration)
.UseDryIocOwinMiddleware(container);
appBuilder.UseWebApi(httpConfiguration);
// I can resolve other services:
var s = container.Resolve<MyOtherService>();
// but I cannot resolve controllers:
var c = container.Resolve<ContentController>();
}
あなたが見ることができるように、MyOtherService
は解決可能です。しかし、ContentController
ではありません。また、APIをリクエストすると、次のエラーが表示されます。
An error occurred when trying to create a controller of type 'ContentController'. Make sure that the controller has a parameterless public constructor.
Google検索は役に立ちません。アプリの実行方法を理解する手助けはできますか?
UPDATE:
コントローラがで-すべて登録されていないようです。無依存関係を持つデフォルトctor
を持っています - - 私はContentController
解決しようとすると、私はこのエラーを取得:
// code:
var c = container.Resolve<ContentController>();
// exception:
An exception of type 'DryIoc.ContainerException' occurred in DryIoc.dll but was not handled in user code
Additional information: Unable to resolve MyProject.Areas.Alpha.Controllers.ContentController
Where CurrentScope:
and ResolutionScope:
and Found registrations:
without matching scope DefaultKey.Of(0),{ID=33, ImplType=MyProject.Areas.Alpha.Controllers.ContentController, Reuse=CurrentScopeReuse {Name="WebRequestScopeName", Lifespan=100}}}
without matching scope DefaultKey.Of(1),{ID=37, ImplType=MyProject.Areas.Alpha.Controllers.ContentController, Reuse=CurrentScopeReuse {Name="WebRequestScopeName", Lifespan=100}}}
これはコントローラを解決できない場合の標準エラー応答です。コントローラの依存関係の1つを解決することはできません。コントローラのすべての依存関係をIoCコンテナで解決できることを確認してください。 – Nkosi
更新からのエラーは、2つのContentController登録があることを示します。加えて、要求スコープで解決されていません - エラーに一致するスコープがありません。単にテストのために 'varスコープ= container.OpenScope(Reuse.WebRequestScopeName); scope.Resolve
dadhi
@dadhiそこには2つの 'ContentController'登録がありました。あなたのコメントを回答として投稿してください。私は 'appBuilder.UseWebApi(httpConfiguration)'と 'appBuilder.UseDryIocWebApi(httpConfiguration)'の両方を呼び出していました。 2番目のものを削除すると問題が解決しました –