ورود

View Full Version : تغییر Connection String در زمان اجرا net core 6



mmohsenifar
شنبه 02 فروردین 1404, 18:59 عصر
با سلام
من تو برنامم نیاز دارم که آیتم های Connection String را در زمان اجرا از یه فایل متنی بخونم و جای سازی کنم
از DI هم تو پروژم استفاده کردم راهنماییم کنید ممنون میشم

bitasoft.ir
چهارشنبه 06 فروردین 1404, 02:43 صبح
با سلام
من تو برنامم نیاز دارم که آیتم های Connection String را در زمان اجرا از یه فایل متنی بخونم و جای سازی کنم
از DI هم تو پروژم استفاده کردم راهنماییم کنید ممنون میشم

سلام
برای تغییر Connection String در زمان اجرا در .NET Core 6 و استفاده از Dependency Injection (DI)، می‌توانید مراحل زیر را دنبال کنید:
۱. خواندن Connection String از فایل متنی

فرض کنیم که فایل متنی شما شامل مقدار Connection String است. شما می‌توانید از IConfiguration یا File.ReadAllText برای خواندن مقدار استفاده کنید.
۲. ذخیره مقدار خوانده‌شده در IOptions یا Scoped Service

یک سرویس Scoped یا Singleton ایجاد کنید که مقدار Connection String را مدیریت کند.
روش پیشنهادی برای پیاده‌سازی

۱. ایجاد کلاس تنظیمات DatabaseSettings

ابتدا یک کلاس برای نگهداری Connection String ایجاد کنید:


public class DatabaseSettings
{
public string ConnectionString { get; set; }
}


۲. ایجاد سرویسی برای بارگذاری Connection String از فایل

یک سرویس ایجاد کنید که مقدار Connection String را در زمان اجرا بخواند و در DI ثبت کند:






public class ConnectionStringProvider
{
private readonly string _filePath = "connection.txt"; // مسیر فایل را تغییر دهید
private string _connectionString;

public ConnectionStringProvider()
{
LoadConnectionString();
}

public void LoadConnectionString()
{
if (File.Exists(_filePath))
{
_connectionString = File.ReadAllText(_filePath).Trim();
}
else
{
throw new FileNotFoundException("فایل Connection String پیدا نشد.");
}
}

public string GetConnectionString() => _connectionString;
}


۳. ثبت سرویس در DI Container

در Program.cs این سرویس را به Dependency Injection (DI) اضافه کنید:






var builder = WebApplication.CreateBuilder(args);

// ثبت سرویس به عنوان Singleton
builder.Services.AddSingleton<ConnectionStringProvider>();

var app = builder.Build();


۴. مقداردهی Connection String در DbContext

در کلاس DbContext مقدار را از DI دریافت کنید:






public class ApplicationDbContext : DbContext
{
private readonly ConnectionStringProvider _connectionStringProvider;

public ApplicationDbContext(ConnectionStringProvider connectionStringProvider)
{
_connectionStringProvider = connectionStringProvider;
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionStringProvi der.GetConnectionString());
}
}


۵. ثبت DbContext در DI

در Program.cs:


builder.Services.AddDbContext<ApplicationDbContext>();


نکات مهم



اگر می‌خواهید که مقدار Connection String به‌صورت خودکار در زمان اجرا آپدیت شود، باید متد LoadConnectionString را دوباره صدا بزنید.
در صورت نیاز به تغییر Connection String بدون Restart، می‌توانید از Scoped Service به جای Singleton استفاده کنید.
می‌توانید مقدار Connection String را از appsettings.json نیز بخوانید، اما روش بالا برای زمانی مناسب است که مقدار باید از یک فایل خارجی یا یک وب سرویس خوانده شود.
مرا خواهید یافت www.a00b.com (https://www.a00b.com)

mmohsenifar
چهارشنبه 13 فروردین 1404, 22:28 عصر
با تشکر از شما
من همه مراحل شمارو انجام دادم ولی با خطای زیر در زمان اجرا مواجه میشم
Unable to resolve service for type 'Myapp.Data.Context.MyappContext' while attempting to activate 'Myapp.Data.Repository.UserRepository'.

fakhravari
شنبه 16 فروردین 1404, 08:11 صبح
بررسی کن
https://github.com/fakhravari/Clean-Architecture