1

我正在使用结构图 4.5.1。我有一个接口的两个实例,我需要知道如何在我的构造函数中检索一个特定的实例。所以在这种情况下,我有一个类需要我的接口的一个实例,然后我有一个不同的类需要我的接口的第二个实例,但不是第一个实例。由于接口通常用于在多个类中实现,所以我觉得这必须是一个常见的场景,但我不明白该怎么做。

我在文档中发现了一个名为“命名实例”的概念,所以我认为这是解决方案,但它不起作用。

这是我的注册表:

    For<IFileWatcher>().Add<Watcher>().Named("fileWatcher");
    For<IFileWatcher>().Add<InboundWatcher>().Named("inboundWatcher");

    For<IFileWatcher>().Use<Watcher>();

这是我的构造函数,它不起作用(当我说它不起作用时,我的意思是结构映射只提供默认实例,即使我将构造函数参数命名为与注册表中相同的名称):

private readonly IFileWatcher _fileWatcher;

public InboundWatcherController(IFileWatcher inboundWatcher) //<-- notice the name is the same as in my registry
{
    _watcher = inboundWatcher; //<-- this is set to an instance of "Watcher", instead of "InboundWatcher" even though the name of the parameter is "inboundWatcher"
}

那么,如何在构造函数中获取“InboundWatcher”而不是“Watcher”的实例?我必须使用容器吗?这似乎真的倒退了,不得不引入容器,这样我才能获得一个类的特定实例。

4

0 回答 0