autofac需要下載Autofac+Autofac.Extensions.DependencyInjection
推薦創建一個類
我這里TestServer是介面和實作類都在這個里面,直接讀取進行批量注入
然后去Program進行替換
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()) .ConfigureContainer<ContainerBuilder>(builder => { builder.RegisterModule(new AutofacConfig());//這里是剛才我們創建的類 });
我們下一步是寫那個配合我們autofac的日志
首先先安裝Castle.Core+Autofac.Extras.DynamicProxy
也在創建一個類
這里繼承的是他提供給我們的介面
這里我用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)); }
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); }
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/482133.html
標籤:.NET Core
上一篇:log4net配置使用
下一篇:返回列表