[英]Access Denied error while trying to use INamedBucketProvider to connect on Couchbase from C# application
我正在嘗試使用接口INamedBucketProvider
,但出現“拒絕訪問”錯誤。 當我嘗試僅使用IBucketProvider
進行連接時,它工作得很好。
以下是我的代碼的一些重要部分:
public interface ICustomerBucketProvider : INamedBucketProvider
{
// nothing goes in here!
}
public static class IServiceCollectionExtension
{
public static IServiceCollection AddCouchbaseConnector(this IServiceCollection services)
{
services.AddCouchbase(opt =>
{
opt.ConnectionString = "couchbase://localhost";
opt.UserName = "Administrator";
opt.Password = "asd123";
opt.Buckets = new[] { "customers" };
});
services.AddCouchbaseBucket<ICustomerBucketProvider>("customers");
return services;
}
}
public class NativeInjectorBootStrapper
{
public static void RegisterServices(IServiceCollection services)
{
// ...
// ...
// ...
services.AddCouchbaseConnector();
}
}
這有效:
private readonly IBucketProvider _bucketProvider;
public CustomerEventHandler(IBucketProvider bucketProvider)
{
_bucketProvider = bucketProvider;
}
private async Task<ICouchbaseCollection> GetCouchbaseCollection()
{
var bucket = await _bucketProvider.GetBucketAsync("customers");
var collection = bucket.DefaultCollection();
return collection;
}
這不起作用:
private readonly ICustomerBucketProvider _customerBucketProvider;
public CustomerEventHandler(ICustomerBucketProvider customerBucketProvider)
{
_customerBucketProvider = customerBucketProvider;
}
private async Task<ICouchbaseCollection> GetCouchbaseCollection()
{
var bucket = await _customerBucketProvider.GetBucketAsync();
var collection = bucket.DefaultCollection();
return collection;
}
難道我做錯了什么?
因此,我決定實現自己的結構來處理存儲桶和 collections:
public interface ICouchbaseBucketBase
{
public ICouchbaseCollection DefaultCollection { get; }
}
public class CouchbaseBucketBase : ICouchbaseBucketBase
{
public ICouchbaseCollection DefaultCollection { get; private set; }
protected readonly IBucket _bucket;
public CouchbaseBucketBase(IBucketProvider bucketProvider, string bucketName)
{
_bucket = bucketProvider.GetBucketAsync(bucketName).GetAwaiter().GetResult();
DefaultCollection = GetCollection();
}
protected ICouchbaseCollection GetCollection(string collectionName = null) =>
!string.IsNullOrWhiteSpace(collectionName) ?
_bucket.Collection(collectionName) : _bucket.DefaultCollection();
}
public interface ICustomerBucket : ICouchbaseBucketBase { }
public class CustomerBucket : CouchbaseBucketBase, ICustomerBucket
{
//public ICouchbaseCollection OtherNonDefaultCollection { get; private set; }
public CustomerBucket(IBucketProvider bucketProvider) : base(bucketProvider, "customers")
{
//OtherNonDefaultCollection = GetCollection("OtherNonDefault");
}
}
public static class IServiceCollectionExtension
{
public static IServiceCollection AddCouchbaseConnector(this IServiceCollection services)
{
services.AddCouchbase(opt =>
{
opt.ConnectionString = "couchbase://localhost";
opt.UserName = "Administrator";
opt.Password = "asd123";
opt.Buckets = new[] { "customers" };
});
services.AddTransient<ICustomerBucket, CustomerBucket>();
return services;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.