添加属性依赖注入、添加自定义日志扩展

This commit is contained in:
陈淳
2022-11-07 01:31:37 +08:00
parent 86e869ff16
commit d6ca4429d5
13 changed files with 218 additions and 21 deletions

View File

@@ -4,7 +4,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Yi.Framework.WebCore.Utility
namespace Yi.Framework.WebCore.AutoFacExtend
{
public class CustomAutofacAop : IInterceptor
{

View File

@@ -15,10 +15,10 @@ using Yi.Framework.Interface;
using Yi.Framework.Job;
using Yi.Framework.Repository;
using Yi.Framework.Service;
using Yi.Framework.WebCore.Utility;
using Yi.Framework.WebCore.AutoFacExtend;
using Module = Autofac.Module;
namespace Yi.Framework.WebCore.Utility
namespace Yi.Framework.WebCore.AutoFacExtend
{
public class CustomAutofacModule : Module
{

View File

@@ -0,0 +1,51 @@
using Autofac;
using Autofac.Core;
using Autofac.Extras.DynamicProxy;
using Castle.DynamicProxy;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using Yi.Framework.Interface;
using Yi.Framework.Job;
using Yi.Framework.Repository;
using Yi.Framework.Service;
using Module = Autofac.Module;
namespace Yi.Framework.WebCore.AutoFacExtend
{
public class PropertiesAutowiredModule : Module
{
protected override void Load(ContainerBuilder containerBuilder)
{
//这里设置哪些程序集可以进行属性注入,默认控制器即可
// 获取所有控制器类型并使用属性注入
var controllerBaseType = typeof(ControllerBase);
//先暂时获取这里的程序集之后改造通过option进行配置
containerBuilder.RegisterAssemblyTypes( Assembly.Load("Yi.Framework.ApiMicroservice"))
.Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
.PropertiesAutowired(new AutowiredPropertySelector());
}
}
public class AutowiredPropertySelector : IPropertySelector
{
public bool InjectProperty(PropertyInfo propertyInfo, object instance)
{
return propertyInfo.CustomAttributes.Any(it => it.AttributeType == typeof(AutowiredAttribute));
}
}
}

View File

@@ -7,9 +7,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
[assembly: HostingStartup(typeof(Yi.Framework.WebCore.Utility.CustomHostingStartup))]
[assembly: HostingStartup(typeof(Yi.Framework.WebCore.BuilderExtend.CustomHostingStartup))]
//这里放上启动类下的dll即自动侵入了当然我们现在不会这样做。
namespace Yi.Framework.WebCore.Utility
namespace Yi.Framework.WebCore.BuilderExtend
{
/// <summary>
/// 必须实现IHostingStartup接口

View File

@@ -0,0 +1,29 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.WebCore.LogExtend
{
public class CustomLogger : ILogger
{
public IDisposable BeginScope<TState>(TState state) => default!;
public bool IsEnabled(LogLevel logLevel)
{
return logLevel == LogLevel.Warning;
}
//真正日志执行的方法
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
{
if (!IsEnabled(logLevel))
{
return;
}
Console.WriteLine($"你好,这里是自定义的日志哦~,{formatter(state, exception)}");
}
}
}

View File

@@ -0,0 +1,38 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.WebCore.LogExtend
{
public static class CustomLoggerExtensions
{
public static ILoggingBuilder AddCustomLogger(
this ILoggingBuilder builder)
{
builder.AddConfiguration();
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton<ILoggerProvider, CustomLoggerProvider>());
//LoggerProviderOptions.RegisterProviderOptions<ColorConsoleLoggerConfiguration, ColorConsoleLoggerProvider>(builder.Services);
return builder;
}
//public static ILoggingBuilder AddColorConsoleLogger(
// this ILoggingBuilder builder,
// Action<ColorConsoleLoggerConfiguration> configure)
//{
// builder.AddColorConsoleLogger();
// builder.Services.Configure(configure);
// return builder;
//}
}
}

View File

@@ -0,0 +1,22 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.WebCore.LogExtend
{
public class CustomLoggerProvider : ILoggerProvider
{
//创建我们自定义日志的方法
public ILogger CreateLogger(string categoryName)
{
return new CustomLogger();
}
public void Dispose()
{
}
}
}