尝试使用INamedBucketProvider从C#应用程序在Couchbase上连接时出现访问被拒绝错误
我正在尝试使用INamedBucketProvider的接口尝试使用INamedBucketProvider从C#应用程序在Couchbase上连接时出现访问被拒绝错误,c#,.net,.net-core,dependency-injection,couchbase,C#,.net,.net Core,Dependency Injection,Couchbase,我正在尝试使用INamedBucketProvider的接口INamedBucketProvider,但遇到了“拒绝访问”错误。 当我尝试仅使用IBucketProvider进行连接时,它可以完美地工作 以下是我的代码的一些重要部分: 公共接口ICCustomerBucketProvider:INamedBucketProvider { //这里什么也进不去! } 公共静态类IServiceCollectionExtension { 公共静态IServiceCollection AddCouc
INamedBucketProvider
,但遇到了“拒绝访问”错误。
当我尝试仅使用IBucketProvider
进行连接时,它可以完美地工作
以下是我的代码的一些重要部分:
公共接口ICCustomerBucketProvider:INamedBucketProvider
{
//这里什么也进不去!
}
公共静态类IServiceCollectionExtension
{
公共静态IServiceCollection AddCouchbaseConnector(此IServiceCollection服务)
{
services.AddCouchbase(opt=>
{
opt.ConnectionString=”couchbase://localhost";
opt.UserName=“管理员”;
opt.Password=“asd123”;
opt.bucket=new[]{“customers”};
});
服务。AddCouchbaseBucket(“客户”);
退货服务;
}
}
公共类NativeInjectorBootStrapper
{
公共静态无效注册表服务(IServiceCollection服务)
{
// ...
// ...
// ...
services.AddCouchbaseConnector();
}
}
这项工作:
专用只读IBucketProvider\u bucketProvider;
公共客户防盗器(IBucketProvider bucketProvider)
{
_bucketProvider=bucketProvider;
}
专用异步任务GetCouchbaseCollection()
{
var bucket=wait_bucketProvider.GetBucketAsync(“客户”);
var collection=bucket.DefaultCollection();
回收;
}
但这不起作用:
专用只读ICCustomerBucketProvider\u customerBucketProvider;
公共CustomerEventHandler(ICCustomerBucketProvider customerBucketProvider)
{
_customerBucketProvider=customerBucketProvider;
}
专用异步任务GetCouchbaseCollection()
{
var bucket=await_customerBucketProvider.GetBucketAsync();
var collection=bucket.DefaultCollection();
回收;
}
我做错什么了吗?因此,我决定实现自己的结构来处理桶和集合:
公共接口ICouchbaseBucketBase
{
公共ICouchbaseCollection默认集合{get;}
}
公共类CouchbaseBucketBase:ICouchbaseBucketBase
{
公共ICouchbaseCollection DefaultCollection{get;private set;}
受保护的只读IBucket\u存储桶;
public CouchbaseBucketBase(IBucketProvider bucketProvider,字符串bucketName)
{
_bucket=bucketProvider.GetBucketAsync(bucketName.GetAwaiter().GetResult();
DefaultCollection=GetCollection();
}
受保护的ICouchbaseCollection GetCollection(string collectionName=null)=>
!string.IsNullOrWhiteSpace(collectionName)?
_bucket.Collection(collectionName):\u bucket.DefaultCollection();
}
公共接口ICCustomerBucket:ICouchbaseBucketBase{}
公共类CustomerBucket:CouchbaseBucketBase、ICCustomerBucket
{
//公共ICouchbaseCollection其他非默认集合{get;private set;}
公共CustomerBucket(IBucketProvider bucketProvider):基本(bucketProvider,“客户”)
{
//OtherNonDefaultCollection=GetCollection(“OtherNonDefault”);
}
}
公共静态类IServiceCollectionExtension
{
公共静态IServiceCollection AddCouchbaseConnector(此IServiceCollection服务)
{
services.AddCouchbase(opt=>
{
opt.ConnectionString=”couchbase://localhost";
opt.UserName=“管理员”;
opt.Password=“asd123”;
opt.bucket=new[]{“customers”};
});
services.AddTransient();
返回服务;
}
}
为了记录在案,Github上也提出了这一问题,这里还有一些进一步的讨论: