Я бы просто создал экземпляр MyProjDataOptionsBuilder
внутри AddMyProjData
, применил optionsBuilder
к этому экземпляру, а затем использовал бы нужные мне свойства.Вот пример:
public static IServiceCollection AddMyProjData(
this IServiceCollection services,
Action<MyProjDataOptionsBuilder> optionsBuilder)
{
var myProjDataOptionsBuilder = new MyProjDataOptionsBuilder();
optionsBuilder(myProjDataOptionsBuilder);
services.Configure(optionsBuilder);
services.AddDbContext<MyProjDbContext>(contextOptions => contextOptions
.UseLazyLoadingProxies()
.UseMySql(myProjDataOptionsBuilder.ConnectionString)
);
return services;
}
Существует некоторое повторение с точки зрения того, что здесь происходит (вызывая optionsBuilder
дважды два раза), но я не ожидаю, что это будет в целом дорогой ценой.
Альтернативой может быть разделение вашего времени конфигурации и параметров времени выполнения - я сомневаюсь, что вам понадобится сама строка подключения где-нибудь, кроме как внутри вашего метода расширения (я только догадываюсь здесь).
Из того, что вы показали в своем ОП, я не уверен, что MyProjDataOptionsBuilder
- это отличное имя (я бы, наверное, просто использовал MyProjDataOptions
), но это в основном здесь в стороне.