我已将我的应用程序设置为使用public MyClass(IInterface sender)
{
this.sender = sender;
}
作为DI容器,我已经注册了所有存储库/服务,并且我希望建立最新的步骤:将简单Simple Injector
记录为在自己的业务中输出。
现在,我不是在谈论如何注册Logger(在我的特定情况下,我使用Injector
,但这适用于所有日志记录框架,但是我如何告诉log4net
使用{ {1}}?
我没有看到任何Simple Injector
,例如Unity
答案 0 :(得分:11)
简单注入器在内部根本不记录任何内容。 。这是一个非常明确的设计决策,因为Simple Injector的API并非专门通过防止任何错误的日志系统报告警告和错误,而专门设计用于防止错误,并且在检测到诸如歧义之类的问题时会抛出异常。 / p>
传达问题的异常分为多个阶段。首先,在注册过程中检查各种条件和约束。其次,在调用.Verify()
时,Simple Injector会检查它是否可以构建所有注册的类型,并进行所有类型的分析以验证对象图是否合理构造。作为最后的选择,如果未调用Verify
,则在首次解析服务时会执行一些检查。
Simple Injector确实提供了两个API来获取有关其注册的文本信息。
您可以使用Verify()
而不是调用Analyzer
来获取有关验证结果的结构化信息。这将包含不会导致验证抛出的图形诊断信息(即提示)。例如,可以将以下测试添加到您的测试套件中:
[TestMethod]
public void Container_Never_ContainsDiagnosticWarnings() {
// Arrange
var container = Bootstrapper.GetInitializedContainer();
container.Verify(VerificationOption.VerifyOnly);
// Assert
var results = Analyzer.Analyze(container);
Assert.IsFalse(results.Any(), Environment.NewLine +
string.Join(Environment.NewLine,
from result in results
select result.Description));
}
有关此的更多信息,请参见documentation about Diagnostics。
Simple Injector还可以通过构建对象图的类似于C#的字符串表示形式来可视化对象图。可以通过调用InstanceProducer.VisualizeObjectGraph()
来完成。可以通过调用InstanceProducer
或Container.GetRegistration()
获得Container.GetRegistration(Type)
。这是一个示例:
var container = new Container();
container.Register<Foo>();
container.Register<IBar, Bar>();
container.Register<ILogger, FileLogger>(Lifestyle.Singleton);
container.Register<IDependency1, Dependency1>();
container.Register<IDependency2, Dependency2>();
// You need to verify to get the correct output of those methods
container.Verify();
var r = container.GetRegistration(typeof(Foo));
Console.WriteLine(r.VisualizeObjectGraph());
这可能会导致以下输出:
Foo(
FileLogger(
Dependency1(),
Dependency2()),
Bar(
Dependency1(),
SomeService()));