MVC プロジェクトをセットアップしています。このように見えます
EfDbContext : IDbContext { ... }
MyStuff : IMyStuff { ... }
MyService : IMyService {
List<things> GetSomething(IDbContext context, IMyStuff stuff) { ... }
}
MyController : Controller {
ActionResult MyAction(IMyService service) { ... }
}
StructureMap.MVC を使用して、すべてのコンストラクターの依存関係を解決し、カスタム ActionFilter での監査とログ記録のためのセッター インジェクションを行います。IoC で手動で指定する必要があるのは、IDbContext の接続文字列だけです。それ以外はすべて自動的に機能します。
いくつかの記事を読むまでは、クラスとインターフェイスの比率が 1:1 の匂いがします。私のアプリケーションは非常に単純です。IMyStuff または IMyService の実装が異なることはありません。私がそれらを持っている唯一の理由は、それらを注入して単体テストできるようにするためです (Rhino を使用しましたが、NSubstitue が好きになり始めました)。
インターフェイスを取り除き、具体的なクラスを直接注入する方法はありますか? だから、それは
GetSomething(IDbContext context, MyStuff stuff) {}
MyAction(MyService service) {}
もちろん、StructureMap を使用したすべての規則ベースの自動配線が必要なので、それらを 1 つずつ指定する必要はありません。
ありがとう。