Menggunakan Microsoft.Extensions.DependencyInjection Di .NET 5 atau .NET Core Console Application

Menggunakan Microsoft.Extensions.DependencyInjection Di .NET 5 atau .NET Core Console Application

Tim,

Berikut ini cara menggabungkan namespace Microsoft.Extensions.DependencyInjection dan kelas ServiceProvider-nya dalam proyek Aplikasi .NET 5 atau .NET Core Console. Jika Anda seorang pengembang ASP.NET Core MVC, Anda mungkin mengenali bagaimana itu diterapkan di Startup.cs untuk Dependency Injection khususnya metode ConfigureServices() di mana metode AddTransient() digunakan untuk memetakan kelas antarmuka dan jenis implementasinya. Untuk memulainya, mari dengan membuat proyek aplikasi .NET 5 Console dan ikuti langkah-langkah di bawah ini.

Pengaturan Proyek

1. Tambahkan paket Microsoft.Extensions.DependencyInjection ke proyek Anda melalui NuGet.

Bacaan Lainnya

2. Buat tiga folder, kelas dan antarmuka baru berdasarkan gambar di bawah.

model

Tambahkan dua kelas model khusus Karyawan dan Produk dengan tiga properti untuk setiap kelas.

Produk.cs

public class Product
{
public int ProductCode { get; set; }
public string ProductName { get; set; }
public double ProductPrice { get; set; }

public Product()
{
ProductCode = 0;
ProductName = string.Empty;
ProductPrice = 0;
}
}
Karyawan.cs

public class Employee
{
public int EmployeeID { get; set; }
public string EmployeeName { get; set; }
public double EmployeeSalary { get; set; }

public Employee()
{
EmployeeID = 0;
EmployeeName = string.Empty;
EmployeeSalary = 0;
}
}

Gudang

Di folder Repositori Anda, tambahkan antarmuka yang mendefinisikan kontrak untuk Produk dan Karyawan dan kelas yang mengimplementasikan kontrak tersebut. Tutorial ini tidak menyertakan metode yang melakukan operasi database. Penekanannya adalah bagaimana Injeksi Ketergantungan bekerja menggunakan ruang nama Microsoft.Extensions.DependencyInjection Microsoft.
IProductDataAccess.cs

public interface IProductDataAccess
{
public void SaveProduct(Product product);
public string ShowProduct();
}
ProductDataAccess.cs

public class ProductDataAccess : IProductDataAccess
{
public Product Product { get; set; }

public ProductDataAccess()
{
Product = new Product();
}

public void SaveProduct(Product product)
{
/* In real-world, this can be a method to save the object to database */
this.Product = product;
}

public string ShowProduct()
{
/* In real-world, this can be a method to get an employee object from the database */
return $"Code - {Product.ProductCode}, Name - {Product.ProductName}, Price - {Product.ProductPrice}";
}
}
IemployeeDataAccess.cs

 public interface IEmployeeDataAccess
{
public void SaveEmployee(Employee employee);
public string ShowEmployee();
}
EmployeeDataAccess.cs

public class EmployeeDataAccess : IEmployeeDataAccess
{
public Employee Employee { get; set; }

public EmployeeDataAccess()
{
Employee = new Employee();
}

public void SaveEmployee(Employee employee)
{
/* In real-world, this can be a method to save the object to database */
this.Employee = employee;
}

public string ShowEmployee()
{
/* In real-world, this can be a method to get an employee object from the database */
return $"ID - {Employee.EmployeeID}, Name - {Employee.EmployeeName}, Salary - {Employee.EmployeeSalary}";
}
}

Kelas DependencyInjectionResolver.cs

Kelas DependencyInjectionResolver.cs menangani injeksi ketergantungan antara tipe layanan dan implementasinya. Dalam konstruktor, Anda dapat melihat bahwa metode AddTransient() memetakan tipe yang ditentukan, misalnya IEmployeeDataAccess dan tipe implementasinya yang merupakan kelas EmployeeDataAccess. Anda memiliki opsi untuk menambahkan lebih banyak layanan sementara ke kelas ServiceCollection selama tipe implementasi yang merupakan kelas harus mengimplementasikan antarmuka. Di kelas ini, ada dua metode yang mengambil layanan dari ServiceProvider yang mengembalikan tipe antarmuka. Ini akan dipanggil di aplikasi utama Anda atau kelas lain.

public class DependencyInjectionResolver
{
private ServiceProvider serviceProvider;

public DependencyInjectionResolver()
{
serviceProvider = new ServiceCollection()
.AddTransient<IEmployeeDataAccess, EmployeeDataAccess>()
.AddTransient<IProductDataAccess, ProductDataAccess>()
.BuildServiceProvider();
}

public IEmployeeDataAccess GetEmployeeRepository()
{
return serviceProvider.GetService<IEmployeeDataAccess>();
}

public IProductDataAccess GetProductRepository()
{
return serviceProvider.GetService<IProductDataAccess>();
}
}

Kelas ManageInformationService.cs

Kelas ManageInformationService bertindak seperti tingkat menengah yang melakukan operasi database dan memanggil metode antarmuka melalui kelas DependencyInjectionResolver. Kelas ini memiliki dua metode yang memisahkan pemrosesan informasi Karyawan dan Produk.

public class ManageInformationService
{
private static DependencyInjectionResolver resolver;

public ManageInformationService()
{
resolver = new DependencyInjectionResolver();
}

public void ManageEmployee()
{
Employee employee;
IEmployeeDataAccess empAccess;

employee = new Employee();
empAccess = resolver.GetEmployeeRepository();

employee.EmployeeID = 10001;
employee.EmployeeName = "Greg Esguerra";
employee.EmployeeSalary = 500.00;

empAccess.SaveEmployee(employee);
Console.WriteLine("Employee Information");
Console.WriteLine(empAccess.ShowEmployee());
}

public void ManageProduct()
{
Product product;
IProductDataAccess prodAccess;

product = new Product();
prodAccess = resolver.GetProductRepository();

product.ProductCode = 2550;
product.ProductName = "Pringles Potato Chips";
product.ProductPrice = 500.00;

prodAccess.SaveProduct(product);
Console.WriteLine("nnProduct Information");
Console.WriteLine(prodAccess.ShowProduct());
}
}

Kelas Program.cs

Program utama membuat instance kelas ManageInformationService dan kemudian memanggil fungsi ManageEmployee dan ManageProduct. Ketika Anda menjalankan aplikasi, itu akan menunjukkan output di bawah ini.

class Program
{
static void Main(string[] args)
{
ManageInformationService manageInformationService;

manageInformationService = new ManageInformationService();

manageInformationService.ManageEmployee();
manageInformationService.ManageProduct();

Console.ReadLine();
}
}

Keluaran

Editor: NEXCloud Team

Pos terkait