2017-05-04 80 views
0

好吧,所以我认为我有一个基本的差距如何Ninject工程跨组件,我希望有人可以帮助我。MongoDB与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始终为空。

更新,增加了信息ON REPOSITORY

为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和基于库返回水合它。

感谢,

+0

您的存储库是如何实现的? – rexcfnghk

+1

你的问题是各种各样的地方,并没有真正提供任何真实的信息来提出建议。 “当对象由存储库创建时”是什么意思?您的存储库如何创建MyMessages? –

+0

@ErikFunkenbusch已更新,以在存储库中添加一些信息。这有帮助吗? –

回答

-3

您需要更改为myService到_myService如下:

public MyMessage(IMyService _myService) {...} 

由于ninject需要相同的对象名注入实例。

+0

Ninject没有这个要求AFAIK – rexcfnghk

+1

只要在容器中注册的接口就有相同的对象名称,但是我们没有匹配名称,它工作正常。 –

+0

@rexcfnghk你是对的,我的不好。 – User3250