adv*_*api 5 .net simple-injector
我已经将我的应用程序设置Simple Injector为DI容器,我已经注册了所有存储库/服务,我正在寻找最新的步骤:Injector在自己的业务中记录Simple 写入的输出.
现在我不是在谈论如何注册Logger(在我使用的特定情况下log4net,但这适用于所有日志框架,但我如何告诉Simple Injector使用日志log4net?我没有看到任何.Log例如Unity
Ste*_*ven 11
简单的喷油器,在内部,不会记录在所有.这是一个非常明确的设计决策,因为Simple Injector的API不是通过任何人都不会看到的日志记录系统来报告警告和错误,而是专门用于防止错误,并且当它检测到问题(例如歧义)时会抛出异常.
在几个阶段抛出了传达问题的例外情况.首先,在登记期间检查各种条件和约束.其次,在调用时.Verify(),Simple Injector会检查它是否可以构建所有已注册的类型,并进行所有类型的分析以验证对象图是否结构合理.作为最后的手段,如果Verify未调用,则在首次解析服务时会执行一些检查.
但是,Simple Injector提供了两个API来获取有关其注册的文本信息.
Verify()您可以使用它Analyzer来获取有关验证结果的结构化信息,而不是调用.这将包括有关您的图表的诊断信息(即提示),这些信息不会导致Verify抛出.例如,可以将以下测试添加到您的测试套件中:
[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));
}
Run Code Online (Sandbox Code Playgroud)
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());
Run Code Online (Sandbox Code Playgroud)
这可能会导致以下输出:
Foo(
FileLogger(
Dependency1(),
Dependency2()),
Bar(
Dependency1(),
SomeService()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |