Unity InjectionFactory不运行

时间:2016-06-13 20:50:28

标签: c# dependency-injection unity-container nlog

总结:似乎没有为类型映射运行InjectionFactory。我想知道为什么以及如何解决这个问题。

首先,我尝试注册界面

Container.RegisterType<ILogger>(new InjectionFactory((c, t, n) => {
                return LogManager.GetLogger(n);
            }));

使用服务定位器解析

ServiceLocator.GetInstance<ILogger>("Operation Manager");

这导致了

The current type, NLog.ILogger, is an interface and cannot be constructed. Are you missing a type mapping?

经过一些修补,我决定尝试不同的方法并使用具体类型注册服务

Container.RegisterType<Logger>(new InjectionFactory((c, t, n) => {
                    return LogManager.GetLogger(n);
                }));

并将解决方法更改为

public OperationService([Dependency("Operation Service")]Logger logger)

这会导致以下错误:

 The type Logger does not have an accessible constructor.

我能想到这种行为的唯一原因是,我通过InjectionFactory传递的函数实际上并没有被调用来解析对象。

1 个答案:

答案 0 :(得分:0)

这是因为您注册了没有名称的类型,并且您尝试按名称解析它。 Unity查找(ILogger, "Operation Manager")的注册,但找不到任何注册。您的无名称注册永远不会被视为合格候选人,因此不会调用InjectionFactory

据我所知,没有内置的方法来实现你想要做的事情。可能有自定义扩展,但到目前为止我的尝试都没有成功。