在我的项目中,我对 IRepositoryProvider 有一个控制器依赖项。
public class HomeController : BaseController
{
public HomeController(ISessionWrapper sessionWrapper,
IRepositoryProvider repositoryProvider,
IApplicationConfiguration applicationConfiguration)
: base(sessionWrapper, repositoryProvider, applicationConfiguration)
{}
...
}
IRepositoryProvider 及其实现位于 BLL 层中。另一件需要注意的是 IRepositoryProvider 也有一些参数。这些用于确定要使用的连接字符串(环境*5 可能的连接)。
public RepositoryProvider(string environment, IApplicationConfiguration applicationConfiguration)
{
_applicationConfiguration = applicationConfiguration;
_environment = environment;
}
这一切都适用于两层和这个 Ninject 配置。
kernel.Bind<IRepositoryProvider>()
.To<RepositoryProvider>()
.InRequestScope()
.WithConstructorArgument("environment",
context => context.Kernel.Get<ISessionWrapper>().CurrentEnvironment)
.WithConstructorArgument("applicationConfiguration",
context => context.Kernel.Get<IApplicationConfiguration>());
当我引入服务层时,我的问题就出现了。我不想依赖控制器中的 IRepositoryProvider 进行数据访问,而是想使用服务层。理想情况下,我不想引用 BLL 层,而只想引用 Service 层。
public class HomeService : IHomeService
{
public IRepositoryProvider RepositoryProvider { get; private set; }
public HomeService(IRepositoryProvider repositoryProvider)
{
RepositoryProvider = repositoryProvider;
}
...
}
所以我的问题是:我是否可以不从 MVC 项目中同时引用 Service 和 BLL 层?或者这整个设置是否有大量代码气味?
谢谢。
更新:我想我应该说我的理想参考。网络 -> 服务 -> BLL。目前,Web 引用 Service 和 BLL 以便 Ninject 解决所有问题。
更新2:这似乎是一个可能的解决方案?如何告诉 Ninject 绑定到它没有引用的实现