autofac需要下載Autofac+Autofac.Extensions.DependencyInjection 推薦創建一個類 我這裡TestServer是介面和實現類都在這個裡面,直接讀取進行批量註入 然後去Program進行替換 builder.Host.UseServiceProvider ...
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); }