Rom*_*syk 8 c# architecture dependency-injection asp.net-web-api
我正在尝试使用像Ninject这样的IoC来设计WebApi应用程序.我有以下几层(3个项目):
Repository层具有接口IRepository<T>和一些实现.并且在Service中还存在IService<T>具有两种不同实现的接口.
如果我在WebApi项目中使用DI容器(Ninject)绑定IService<T>和ServiceConcrete<T>服务项目中的DI容器来绑定IRepository<T>和RepositoryConcrete<T>?,请指教我吗?
或者我应该在WebAppi项目中只使用一个DI?
kay*_*ess 15
我发现设置Ninject模块的实用方法可以在下面找到.
DependencyResolutionDependencyResolution在WebAPI项目中引用此项和您的域项目NinjectWebCommon.cs ServiceModule.cs,RepositoryModule.cs,等创建Ninject模块(一个或多个).有关详细说明,请参阅我的答案.DependencyResolution项目和域项目的引用.在WebAPI项目中初始化/注册刚刚创建的模块,NinjectWebCommon.cs如下所示:
private static void RegisterServices(IKernel kernel)
{
var modules = new List<INinjectModule>
{
new ServiceModule(),
new RepositoryModule()
};
kernel.Load(modules);
}
Run Code Online (Sandbox Code Playgroud)我还将尝试解决与您的问题松散相关的另一个问题.我认为您当前的分层设置需要稍微改变一下.
你的图层的基本和可能是我最大的问题是你混淆并因此紧密地结合域和存储库,这显然是一个基础设施问题.
我建议你重新构建你的图层:
不要忘记您的域层应不具有任何想法基建像库的细节,否则你要紧密结合域与不必要的实施细节.
编辑:从评论我看到你有一些关于放置位置以及如何命名的问题,这显然是编程中最难的事情之一.
所以我清除这种混乱的想法是:
Layer:是属于一起的类,方法等的逻辑分离或集合点.
每个图层可以包含多个项目或程序集.所以,如果你想你的项目归类为层,您可以创建目录,在您的解决方案命名你的图层,并把这些目录内的个别项目.这真的只是嘴里的味道问题,就像小费一样.
依赖性解析项目引用了任何所需的程序集(接口的域,其实现的服务/基础结构),并将它们连接起来供以后使用.
WebAPI项目只需要引用添加的域和依赖关系解析,这样您就可以在WebAPI方法/函数公共构造函数中询问您的接口,Ninject将在幕后为您执行脏工作.
请不要忘记,这只是我的一个简单的快速建筑建议,不知道您的确切要求和用例.