autofac+redis+日志中间件

  • autofac+redis+日志中间件已关闭评论
  • 206 次浏览
  • A+
所属分类:.NET技术
摘要

autofac需要下载Autofac+Autofac.Extensions.DependencyInjection推荐创建一个类   我这里TestServer是接口和实现类都在这个里面,直接读取进行批量注入

autofac需要下载Autofac+Autofac.Extensions.DependencyInjection

推荐创建一个类

autofac+redis+日志中间件

 

 

 我这里TestServer是接口和实现类都在这个里面,直接读取进行批量注入

然后去Program进行替换

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())        .ConfigureContainer<ContainerBuilder>(builder =>        {            builder.RegisterModule(new AutofacConfig());//这里是刚才我们创建的类        });

我们下一步是写那个配合我们autofac的日志

首先先安装Castle.Core+Autofac.Extras.DynamicProxy

也在创建一个类

autofac+redis+日志中间件

 

 

 这里继承的是他提供给我们的接口

这里我用StackTrace找不到调用者的方法名称。。。。。。

不过log4net他有线程id显示 不知道也没有关系

然后在到我们的autofacConfig类里注入

这个aop是可以选择那些方法进行记录日志的,到注入的后面加上下面的代码就行

protected override void Load(ContainerBuilder builder)         {             builder.RegisterType(typeof( LogMidd));//这里先注入             builder.RegisterAssemblyTypes(Assembly.Load("TestServer")).Where(x => x.Name.EndsWith("Imp")).AsImplementedInterfaces()//单列                 .EnableInterfaceInterceptors().InterceptedBy(typeof(LogMidd));              ///这aop是可以选择那些进入实现类要写日志的              ///在注入的后面加上这下面的代码             ///  .EnableInterfaceInterceptors().InterceptedBy(typeof(LogMidd));         }

autofac+redis+日志中间件

 ok ,我们这里进入ltestimp实现类的tests方法 这里入参是一个实体+2

返回的是一个实体

这里还可以写异常捕获,难得写了

 public Rediscs()         {             _connection = ConnectionMultiplexer.Connect(ConnectionString);          }         ///         /// 连接字符串         ///         private static string ConnectionString = "127.0.0.1:6379";         ///         //////         private readonly object _lock = new object();         ///         /// 连接对象         ///         private volatile IConnectionMultiplexer _connection;         ///         /// 数据库         ///         private IDatabase _db(int? db = 8)         {             return GetDatabase(db);         }          /// 获取连接         ///         ///         protected IConnectionMultiplexer GetConnection()         {             if (_connection != null && _connection.IsConnected)             {                 return _connection;             }             lock (_lock)             {                 if (_connection != null && _connection.IsConnected)                 {                     return _connection;                 }                 if (_connection != null)                 {                     _connection.Dispose();                 }                 _connection = ConnectionMultiplexer.Connect(ConnectionString);             }             return _connection;         }         /// <summary>         /// 选择库         /// </summary>         public IDatabase GetDatabase(int? db)         {             return _connection.GetDatabase(db ?? -1);         }         /// <summary>         /// 返回这个库里所有的缓存         /// </summary>         public  List<RedisValue> GetAlls(int db)         {            var keys= _connection.GetServer(ConnectionString).Keys(2);//读取这个库里的所有key 他这个你把他tolist是读取不到他的value的 他有访问级别限制              List<RedisKey> listkey = new List<RedisKey>();             keys.ToList().ForEach(key =>             {                 listkey.Add(key);             });             return _db(db).StringGet(listkey.ToArray()).ToList();         }         /// <summary>         /// 判断这个key是否存在这个库里         /// </summary>         /// <returns></returns>         public async Task<bool> IsBool(string key, int? db = null)         {             if (string.IsNullOrWhiteSpace(key))                 return false;             if (db.HasValue)                 return await _db(db).KeyExistsAsync(key);             return await _db().KeyExistsAsync(key);          }         /// <summary>         /// 从这个库里删除         /// </summary>         public async Task<bool> Delete(string key, int? db = null)         {              if (string.IsNullOrWhiteSpace(key))                 return false;             if (db.HasValue)                 return await _db(db).KeyDeleteAsync(key);             return await _db().KeyDeleteAsync(key);         }         /// <summary>         /// 获取这个key的value         /// </summary>         /// <param name="key"></param>         /// <param name="db"></param>         /// <returns></returns>         public async Task<object> GetRedis(string key, int? db = null)         {              if (string.IsNullOrWhiteSpace(key)) return null;             if (!db.HasValue)                 return await _db().StringGetAsync(key);             return await _db(db).StringGetAsync(key);          }         /// <summary>         /// 添加进入库里面         /// </summary>         public async Task<bool> Create(string key, object value, TimeSpan? time = null, int? db = null)         {              if (string.IsNullOrWhiteSpace(key))                 return false;             if (!time.HasValue) time = TimeSpan.FromDays(1);             if (db.HasValue)                 return await _db(db).StringSetAsync(key, Serialize(value), time);             return await _db().StringSetAsync(key, Serialize(value), time);          }         private byte[] Serialize(object data)         {             var json = JsonConvert.SerializeObject(data);             return Encoding.UTF8.GetBytes(json);         }