MongoDB .GetDatabase产生“字段初始值设定项不能引用非静态字段,方法或属性”
问题描述:
使用MongoDB C#驱动程序2.4.2,尝试建立一些引用,但得到关于_db的最后一行的err。MongoDB .GetDatabase产生“字段初始值设定项不能引用非静态字段,方法或属性”
“A字段初始不能引用非静态字段,方法或属性CurrentClassName._client”
不能弄清楚。
代码:
public class MongoDatabase<T> : ImyDB<T> where T : class, new()
{
private static string _connectionString = ConfigurationManager.ConnectionStrings["db"].ConnectionString;
private string _dbName;
private MongoClient _client = new MongoClient(_connectionString);
private IMongoDatabase _db = _client.GetDatabase(_dbName);
答
您在_db
场的初始化引用_client
场。从C#规范10.4.5.2 Instance field initialization
为实例字段变量初始值不能引用被创建的 实例。因此,在变量初始值设定项中引用它是编译时错误,因为变量初始值设定项通过简单名称引用任何实例成员的编译时错误。
你既可以初始化移到构造函数,或者至少你应该将_db
初始化有:
public MongoDatabase()
{
_client = new MongoClient(_connectionString);
_db = _client.GetDatabase(_dbName);
}
我也会考虑注入client
到类和移动配置读责任你的IoC包含器配置。