2017-02-11 3 views
-3

Используя MongoDB C# драйвер 2.4.2, попробуйте установить некоторую ссылку, но получите ошибку для последней строки относительно _db.MongoDB .GetDatabase дает «Инициализатор поля не может ссылаться на нестатическое поле, метод или свойство»

«Поле инициализатор не может ссылаться на нестатическая поля, метода или свойства 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); 

ответ

1

Вы ссылаетесь _client поле в инициализаторе _db области. От C спецификации 10.4.5.2 Instance field initialization

# инициализатора переменной для поля экземпляра не может ссылаться на экземпляр создается. Таким образом, это ошибка времени компиляции, чтобы ссылаться на это в инициализаторе переменной, поскольку это ошибка времени компиляции для инициализатора переменной для ссылки на любой экземпляр элемента через простое имя.

Вы можете переместить оба инициализацию в конструктор, или, по крайней мере, вы должны переместить _db инициализации там:

public MongoDatabase() 
{ 
    _client = new MongoClient(_connectionString); 
    _db = _client.GetDatabase(_dbName); 
} 

Я хотел бы также рассмотреть инъекции client в свой класс, и перемещение конфигурации чтения ответственности вашего IoC конфигурацию сдерживания.