現在のバージョンのStructureMapは、ASP .Net Web API、MVC 4、および.NET Framework 4.5をサポートしていますか?StructureMapとASP .Net Web APIと.Net Framework 4.5
答えて
hereのように、Web APIは依存関係リゾルバを使用します。
class StructureMapDependencyResolver : IDependencyResolver
{
public IDependencyScope BeginScope()
{
return this;
}
public object GetService(Type serviceType)
{
return ObjectFactory.GetInstance(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return ObjectFactory.GetInstances(serviceType);
}
public void Dispose()
{
}
}
そして、あなたのGlobal.asax.csでは、依存関係のリゾルバ登録するには、この行が含ま:それはさておき
GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver();
を、新しいWeb APIは、IoCコンテナを使用することは非常に簡単です。
私はまだ調べていませんが、空白のまま残したBeginScope
メソッドを子コンテナと併用することができます。
編集:
上記の実装は素晴らしい作品。実際、私はあなたに伝えようとしている選択肢よりも好きです。これは、どのタイプも最高のStructureMapの能力に解決し、何かがうまくいかなくなったときにエラーを投げます。彼らは私が間違っていたことを私に示すので、私はエラーを見るのが好きです。
しかし、何か問題が生じた場合、GetService
はnullを返すとAPIは考えています。だから、APIに準拠するために、これは推奨される実装です:違い
public object GetService(Type serviceType)
{
if (serviceType.IsAbstract || serviceType.IsInterface)
return ObjectFactory.TryGetInstance(serviceType);
else
return ObjectFactory.GetInstance(serviceType);
}
TryGetInstance
のみコンテナに登録されたタイプを探し、何かがうまくいかない場合はnullを返すことです。 serviceType.IsAbstract || serviceType.IsInterface
は、使用する方法を決定するのに十分なチェックとみなされます。私の元々の答えは簡単でシンプルであることを意図していましたが、@PHeibergはここでのコメントで完全に「正しい」わけではないことを指摘しています。あなたは知識があるので、何が最善のものであれ使用してください。
ASP.NET Web APIリリースバージョンは依存関係リゾルバ(IDependencyResolverインターフェイスの実装)を使用し、新しい概念依存スコープ(IDependencyScopeインターフェイスの実装)も導入しています。 IDependencyScopeを適切に実装することが重要です。適切に実装されている場合は、IDependencyScopeが配置されたときに(スコープで作成された)リソースを解放できます。要求が終わると処分されます。
IDependencyScopeは、コンテナがネストされた(または子の)コンテナをサポートしているときに最も効果的です。 StructureMapはバージョン2.6.1からそれを行います。
私は、Web APIでのStructureMapを設定するには、どのように記事を書いた:Configuring StructureMap in ASP.NET WebAPI
また、マイク・ワッソンから記事をチェックすることができます。ここで予想よう Using the Web API Dependency Resolver
- 1. WCFとASP .Net Web API
- 2. ASP Net Core StructureMap HybridLifecycle replacement
- 3. AutofacとASP .Net MVC 4 Web API
- 4. Web ApiルートコンフィグレーションASP-NET MVC
- 5. asp netのASP.NET Web API
- 6. import .Net Framework 4.5ライブラリin .Net Core MVC App
- 7. ライブラリターゲティング.Net Framework 4.5と.NET標準を作成する
- 8. ASP.NET Web API Framework 4.5エラーIIS7
- 9. WiXカスタムブートストラップアプリケーションと.NET 4.5
- 10. ASP .Net Core - Entity Framework 7
- 11. .net framework 4.5を.net framework 4.6にアップグレードするには?
- 12. Google APIと.NET Compact Framework
- 13. ASP 4.5 Webフォーム - スクリプトマネージャフォールバック
- 14. フォースASP .NETでのWeb API(403)
- 15. ASP .Net Web API RC:Memorystreamへのマルチパートファイルアップロード
- 16. ASP .NET 5 WEB APIヘルプページを作成
- 17. MVVMを使用したAsp .NET Web API
- 18. .NET 4.0の.NET 4.5のTask.FromResult()と同等
- 19. ASP .NETとSonarLint
- 20. ASP .Net Identity and Entity Frameworkデータベース
- 21. 従来のASP .NET WebフォームとMVC
- 22. MVC 5 Webソリューションを.NET Framework 4.5から4.6にアップグレード
- 23. ASP .Net Web APIバイナリーとして画像をダウンロードする
- 24. Qt 4.5 .NET Frameworkの依存関係
- 25. CoCoaアプリケーションの.NET Framework 4.5クラスライブラリプロジェクトの参照
- 26. IdentityServer4とWeb APIの.NET 4.6.2
- 27. .NET Framework 4.5:SMTPクライアント認証モード?
- 28. .Net Standard Nuget Framework 4.5プロジェクトにインストール
- 29. Visual Studio 11 betaと.NET 4.5
- 30. Tasksと.NETのスレッド4.5
のStructureMapは、依存関係の解決を処理しません。この例とJeremyのコメントをチェックしてください:http://ardalis.com/How-Do-I-Use-StructureMap-with-ASP.NET-MVC-3 – PHeiberg
実際これは動作します。 Jeremyは 'TryGetInstance'は' serviceType'が明示的に登録されている場合にのみ解決すると言います。 'GetInstance'はまだ登録されていないが具体的な型を解決します。 – kelloti
インスタンスの解決はコードで機能します。しかし、私はジェレミー自身が[それを推奨する]ので、私が提案した "ベストプラクティス"として投稿したリンクを解釈します(http://codebetter.com/jeremymiller/2011/01/23/if-you-are-using-structuremap-with -mvc3-please-read-this /)私はGetServiceメソッドは、型がコンテナによって解決可能でない場合、例外を生成する代わりにnullを返すことになっていると思います。 – PHeiberg