Unity自动注入
我已经完成了以下操作:
- 注册我的记录器实例 通过 ILogger 接口统一。
- 创建了一个界面, ILoggableObject,有一个方法, Hook(ILogger logger),注入我的记录器。
我想实现这一点:
每次我向统一请求任何解决方案时,如果该对象实现 ILoggableObject,则通过 Hook 方法自动注入 ILogger 接口。
我认为这可以通过拦截或策略实现吗?
任何帮助都会很棒。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您正在寻找的是 Unity 中的 TypeInterception。请参阅此处:http://msdn.microsoft.com/en -us/library/ff660861(PandP.20).aspx
另外这里 http://msdn.microsoft.com/en-us/library/ff660848(v=PandP.20).aspx
您想要拦截对构造函数的调用并注入 Logger代表调用代码,而他们却一无所知。
虽然我之前没有这样做过,但我相信您可以使用 Intercept.NewInstance() http://msdn.microsoft.com/en-us/library/ff662093(PandP.20).aspx
What you are looking for is TypeInterception in Unity. See here: http://msdn.microsoft.com/en-us/library/ff660861(PandP.20).aspx
Also here http://msdn.microsoft.com/en-us/library/ff660848(v=PandP.20).aspx
You want to intercept the call to the constructor and inject the Logger on behalf of the calling code without them being any wiser.
While I haven't done it before I believe you can do what you want using Intercept.NewInstance() http://msdn.microsoft.com/en-us/library/ff662093(PandP.20).aspx
这是一种(尝试)进行依赖注入的可怕方式。请改用构造函数注入,并将 ILogger 注入(通过构造函数)到当前具有 Hook 方法的使用者中。
That is a horrible way to (attempt to) do Dependency Injection. Use Constructor Injection instead and inject (via the constructor) the ILogger into the consumer that right now has the Hook method.
虽然我真的很喜欢 Unity 和 IoC/DI,但我不确定它是完成您想要做的事情的正确工具。
您可以考虑使用 PostSharp 或类似工具来研究面向方面的编程。这将允许您添加日志记录或其他横切关注点,而无需更改正在检测的类。
While I really like Unity and IoC/DI, I'm not sure that it is the right tool to accomplish what you want to do.
You might consider looking at aspect-oriented programming using PostSharp or a similar tool. This would allow you to add logging or other cross-cutting concerns without changing the classes being instrumented.