望着这answer on SO,我有点在下面的“原则”困惑:依赖注入 - 正确的地方注入
应用好莱坞原则
好莱坞原则DI方面说:不要拨打DI Container,它会给你打电话。
千万不要直接通过调用 代码中的容器来请求依赖关系。通过使用构造器注入隐式地询问它。
但是如果我在我的DAL的存储库类,我想这种情况下提供给当TCP/IP客户端连接其上创建一个对象?我应该在什么地方进行注射?
现在,我有这样的事情:
// gets created when a new TCP/IP client is connected
class Worker
{
private readonly IClient client;
public Worker(IClient client)
{
// get the repository
var repo = IoC.GetInstance<IClientMessagesRepo>();
// create an object which will parse messages
var parser = new MessageParser(client);
// create an object which will save them to repo
var logger = new MessageLogger(parser, repo);
}
}
我当我的应用程序启动明显不能创建实例。那么我在哪里注入回购?
非常感谢!
当应用程序被启动为什么不能创建IClientMessageRepo实例?从给出的代码,它远不是'明显的'... –
你可能也想引用这个答案:http://stackoverflow.com/questions/1410719/design-where-should-objects-be-registered-when -using-windsor/1410738#1410738 –
@Mark:不,对不起,我的意思是,我不能要求容器在开始时创建* Worker *实例。我*可以*创建回购实例,然后传递它,但我使用一个回购每个实体,所以我觉得传递一堆比使用容器来根据需要获取它们更复杂。 – doe