Asp.net mvc 依赖于具有Ninject和MVC的服务层
我在尝试使用Ninject时遇到了一个使用MVC的bog标准三层项目的问题。我有一个MemberRepository:Asp.net mvc 依赖于具有Ninject和MVC的服务层,asp.net-mvc,dependency-injection,ninject,Asp.net Mvc,Dependency Injection,Ninject,我在尝试使用Ninject时遇到了一个使用MVC的bog标准三层项目的问题。我有一个MemberRepository: public class MemberRepository : IMemberRepository{ public bool Save(Member member){ //saves member } } public class AccountController : Controller { IMemberService _
public class MemberRepository : IMemberRepository{
public bool Save(Member member){
//saves member
}
}
public class AccountController : Controller
{
IMemberService _memberService;
public AccountController(IMemberRepository memberRepo)
{
_memberService = new MemberService(memberRepo);
}
}
然后我有了我的服务层:
public class MemberService : IMemberService{
public bool Register(string email){
//Do Stuff & Populate Member Object
_repo.Save(member);
}
}
考虑到我将使用Ninject,设置AccountController的最佳方法是什么。我是否应该像这样将MemberService传递给构造函数:
public class AccountController : Controller
{
IMemberService _memberService;
public AccountController(IMemberService memberService)
{
_memberService = memberService;
}
}
或传入存储库:
public class MemberRepository : IMemberRepository{
public bool Save(Member member){
//saves member
}
}
public class AccountController : Controller
{
IMemberService _memberService;
public AccountController(IMemberRepository memberRepo)
{
_memberService = new MemberService(memberRepo);
}
}
或者两者都有
我最初只有一个存储库(没有服务层),但我必须实现一个服务层,我不确定在我的NinjectWebCommon.cs文件中注册内核时如何处理“依赖关系”。本来就是这样,
kernel.Bind<IMemberRepository>().To<SqlMemberRepository>();
kernel.Bind().To();
但现在我想知道是否需要注册IMemberService并将repo作为某种参数
:It’他觉得有点失落。希望我说得有道理,有人能帮上忙。我从未使用过Ninject,我一直在使用Unity,但同样的原则也存在,所以希望这可能会有所帮助 服务层是向控制器公开的东西——控制器不需要了解底层存储库。流程如下,每个层都不知道上面的层: 控制器->服务>存储库 因此,我将使用选项1,然后将存储库注入到服务的构造函数中
public class MemberService : IMemberService {
private readonly IMemberRepository _repo;
[Inject]
public MemberService (IMemberRepository repo){
this._repo = repo;
}
public bool Register(string email){
//Do Stuff & Populate Member Object
_repo.Save(member);
}
}
及
该示例显然使用构造函数注入,但如果需要,可以使用属性/字段注入。注册依赖项时,必须同时注册:
kernel.Bind<IMemberRepository>().To<SqlMemberRepository>();
kernel.Bind<IMemberService>().To<MemberService>();
kernel.Bind().To();
kernel.Bind().To();
由于服务和存储库都是依赖项,因此最佳做法是将它们都注入控制器中。这会让它有一个旋转。谢谢你,伊恩,你过得怎么样?运气好吗?