NEST & Dependency Injection
Возник вопрос, а как грамотно добавить в DI ElasticClient?
Как вариант:
services.AddSingleton<ElasticClient>();
Но в данном случае ElasticClient остается несконфигурированным и, по своей сути, бесполезный.
Второй вариант, который мне пришел в голову - написать класс обертку
public class ElasticContext {
public ElasticClient Client;
public ElasticContext () {
Client = new ElasticClient(new AbstractSettings());
}
}
И потом:
services.AddSingleton<ElasticContext>();
Но, тогда приходится обращаться к свойству Client, что выглядит костыльно.
Слаб в DI, подскажите пожалуйста как можно сделать красиво.
Ответы (1 шт):
Автор решения: icYFTL
→ Ссылка
@tym32167, спасибо тебе.
public static class ElasticsearchExtensions
{
public static void AddElasticsearch(
this IServiceCollection services, IConfiguration configuration)
{
var url = configuration["elasticsearch:url"];
var defaultIndex = configuration["elasticsearch:index"];
var settings = new ConnectionSettings(new Uri(url))
.DefaultMappingFor<Post>(m => m
.Ignore(p => p.IsPublished)
.PropertyName(p => p.ID, "id")
)
.DefaultMappingFor<Comment>(m => m
.Ignore(c => c.Email)
.Ignore(c => c.IsAdmin)
.PropertyName(c => c.ID, "id")
);
var client = new ElasticClient(settings);
services.AddSingleton<IElasticClient>(client);
}
}