gpt4 book ai didi

model-view-controller - AutoFac 和 Log4Net - 注册和使用

转载 作者:行者123 更新时间:2023-12-04 00:15:15 25 4
gpt4 key购买 nike

有人指导我将 AutoFac(而不是 CaSTLe Windsor)与 log4net 一起使用,但我不知道如何正确地结合使用这些技术。

使用 autofac 网站上的示例,我有以下 LoggerModule

public class LoggingModule : Module
{
private static void InjectLoggerProperties(object instance)
{
var instanceType = instance.GetType();

// Get all the injectable properties to set.
// If you wanted to ensure the properties were only UNSET properties,
// here's where you'd do it.
var properties = instanceType
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.PropertyType == typeof(ILog) && p.CanWrite && p.GetIndexParameters().Length == 0);

// Set the properties located.
foreach (var propToSet in properties)
{
propToSet.SetValue(instance, LogManager.GetLogger(instanceType), null);
}
}

private static void OnComponentPreparing(object sender, PreparingEventArgs e)
{
var t = e.Component.Activator.LimitType;
e.Parameters = e.Parameters.Union(
new[]
{
new ResolvedParameter((p, i) => p.ParameterType == typeof(ILog),
(p, i) => LogManager.GetLogger(t))
});
}

protected override void AttachToComponentRegistration(IComponentRegistry componentRegistry, IComponentRegistration registration)
{
// Handle constructor parameters.
registration.Preparing += OnComponentPreparing;

// Handle properties.
registration.Activated += (sender, e) => InjectLoggerProperties(e.Instance);
}
}

以及注册它的以下代码

builder.RegisterModule(new LoggingModule());

这是整合它的正确方法吗?

我如何在 MVC Controller 中使用它?

最佳答案

log4net 模块与任何其他模块一样 Autofac module - 你在 ContainerBuilder 中注册它(如你所示)以及所有其他注册。

// EITHER
builder.RegisterModule<LoggingModule>();
// OR
builder.RegisterModule(new LoggingModule());

The documentation on the log4net module page解释了如何使用它来将 ILog 参数注入(inject)对象的构造函数或属性。

因此,就像任何其他 IoC 结构化类一样,要使用它,您需要添加一个构造函数或属性以允许它被注入(inject)。

public class SomeClassThatNeedsLogging
{
private ILog _logger;
public SomeClassThatNeedsLogging(ILog logger)
{
this._logger = logger;
}
}

同样,您可以使用构造函数或属性注入(inject)。

public class SomeClassThatNeedsLogging
{
public ILog Logger { get; set; }
}

当您解析注册消费者时,Autofac 会进行接线。

var someClass = container.Resolve<SomeClassThatNeedsLogging>();
// someClass will have the ILog value populated.

对于 Controller ,您已经使用 Autofac 注册了它们,因此您需要做的就是添加构造函数参数或公共(public)可写属性。 MVC 集成完成所有解析,因此无需手动执行任何操作,无需调用 Resolve 或任何其他内容。

如果仍然不清楚,我建议您花一些时间了解 the Autofac quick start guide并潜入the rest of the documentation .

关于model-view-controller - AutoFac 和 Log4Net - 注册和使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24811956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com