带有Ninject的MongoDB:从存储库中解析依赖关系

时间:2017-05-04 01:04:22

标签: asp.net-mvc mongodb ninject onion-architecture

好的,所以我认为我对Ninject如何跨组装工作存在根本性的差距,我希望有人可以帮助我。

我有一个asp.net mvc网站,它引用了一个包含我的域对象和我的存储库以及一些服务的Core.dll。我的域对象有一个构造函数和一个看起来像这个

的方法
public class MyMessage{
   private IMyService _myService;
   public MyMessage(IMyService myService) {...}
   public void Send() { //uses IMyService }
}

我的存储库只返回IEnumerable<MyMessage>

在我的asp.net mcv网站控制器中,我正在注入存储库并调用 var msg = await myRepository.GetOneAsync(id)。然后我想打电话给msg.send()

我面临的问题是,当对象从存储库返回时,_myService始终为null。

更新以在存储库中添加信息

myRepositry.Get的代码如下所示:

public async Task<MyMessage> GetOneAsync(string messageId) 
=> await Collection.Find(q => q.Id == messageId).SingleOrDefaultAsync();

Collection是IMongoCollection<MyMesage>。所以基本上Mongo 2.0 C#驱动程序正在为我序列化对象,我似乎无法让Ninject解决依赖关系。

如果我调用DependencyResolver.Current.GetService<MyMessage>()它可以正常工作,但从不通过存储库创建对象时。

我想要实现的目标是什么?如果是这样,怎么样?如果没有,我的选择是什么?目前我只是创建依赖性解决的MyMessage并根据存储库返回的内容对其进行保护。

谢谢,

1 个答案:

答案 0 :(得分:-3)

您需要将myService更改为_myService,如下所示:

public MyMessage(IMyService _myService) {...}

因为ninject需要相同的对象名来注入实例。