我用以下代码在DI中启动了集群:
serviceCollection.AddSingleton<ICouchbaseRepository>(service =>
{
var couchbaseOptions = service.GetService<AppSettings>()?.CouchbaseOptions
?? throw new NullReferenceException(nameof(CouchbaseOptions));
var cluster = Cluster.ConnectAsync(new ClusterOptions
{
ConnectionString = couchbaseOptions.ConnectionString,
Buckets = new List<string> { couchbaseOptions.Bucket }, // See here
UserName = couchbaseOptions.Username,
Password = couchbaseOptions.Password
});
return new CouchbaseRepository(cluster);
});
由于我在初始化过程中指定了bucket名称,我以后如何在不提供bucket名称的情况下访问它?
我不能使用类似Cluster.BacketAsync((的东西,因为它需要在这里指定bucket名称(当我之前指定了所需的bucket名称时,必须再次指定名称有什么意义?(。
我尝试了Cluster.Buckets.GetAllBucketsAsync()
,但我得到了ArgumentNullException
;使用CCD_ 3或CCD_。
Unhandled exception. System.ArgumentNullException: Value cannot be null. (Parameter 'value')
at Newtonsoft.Json.Utilities.ValidationUtils.ArgumentNotNull(Object value, String parameterName)
at Newtonsoft.Json.Linq.Extensions.Value[T,U](IEnumerable`1 value)
at Newtonsoft.Json.Linq.Extensions.Value[U](IEnumerable`1 value)
at Couchbase.Management.Buckets.BucketManager.GetBucketSettings(JToken json)
at Couchbase.Management.Buckets.BucketManager.GetAllBucketsAsync(GetAllBucketsOptions options)
环境:
- .NET Core 5
- CouchbaseNetClient 3.1.3
- Couchbase服务器社区6.6.0
- 在Docker上运行
注意:这是Couchbase论坛的交叉帖子:https://forums.couchbase.com/t/how-to-get-the-bucket-when-previously-specified-with-cluster-connectasync/29877
原来这是GetAllBucketsAsync()
中的一个已知错误。