私のプロジェクトでは、とりわけ IRepositoryProvider に対するコントローラーの依存関係がありました。
public class HomeController : BaseController
{
public HomeController(ISessionWrapper sessionWrapper,
IRepositoryProvider repositoryProvider,
IApplicationConfiguration applicationConfiguration)
: base(sessionWrapper, repositoryProvider, applicationConfiguration)
{}
...
}
IRepositoryProvider とその実装は、BLL レイヤーに存在します。もう 1 つ注意すべき点は、IRepositoryProvider にもいくつかのパラメーターがあることです。これらは、使用する接続文字列を決定するために使用されます (環境*5 可能な接続)。
public RepositoryProvider(string environment, IApplicationConfiguration applicationConfiguration)
{
_applicationConfiguration = applicationConfiguration;
_environment = environment;
}
これはすべて、2 つのレイヤーとこの Ninject 構成で正常に機能します。
kernel.Bind<IRepositoryProvider>()
.To<RepositoryProvider>()
.InRequestScope()
.WithConstructorArgument("environment",
context => context.Kernel.Get<ISessionWrapper>().CurrentEnvironment)
.WithConstructorArgument("applicationConfiguration",
context => context.Kernel.Get<IApplicationConfiguration>());
サービスレイヤーを導入したときに問題が発生しました。データ アクセスをコントローラーで IRepositoryProvider に依存する代わりに、サービス レイヤーを使用したいと考えています。理想的には、BLL レイヤーを参照せずに、サービス レイヤーのみを参照したいと考えています。
public class HomeService : IHomeService
{
public IRepositoryProvider RepositoryProvider { get; private set; }
public HomeService(IRepositoryProvider repositoryProvider)
{
RepositoryProvider = repositoryProvider;
}
...
}
私の質問はこれです: MVC プロジェクトからサービス層と BLL 層の両方を参照しないことは可能ですか? それとも、このセットアップ全体が大規模なコードの匂いですか?
ありがとう。
更新: 私は私の理想的な参照を言うべきだったと思います. Web -> サービス -> BLL。現時点では、Web は Service と BLL の両方を参照して、Ninject がすべてを解決できるようにします。
更新 2: これは可能な解決策のように思えますか? 参照を持たない実装にバインドするように Ninject に指示する方法