添加属性依赖注入、添加自定义日志扩展
This commit is contained in:
@@ -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
|
||||
{
|
||||
@@ -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
|
||||
{
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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接口
|
||||
@@ -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)}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
//}
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user