Hi Vojislavekli-4660,
Here is an example that injecting the IBusinessLayer and ILogger object through Forms object, and you can refer to.
And Generic HostBuilder was introduced in .NET Core 2.1.
1.Create a Windows FormsApp(.NET Core).
2.Add ConfigureServices() method:
Please add below ConfigureServices() method. This method can be used for registering all the required services within Service collection.
private static void ConfigureServices(ServiceCollection services)
{
services.AddLogging(configure => configure.AddConsole())
.AddScoped<IBusinessLayer, CBusinessLayer>()
.AddScoped<IBusinessLayer, CBusinessLayer>()
.AddSingleton<IDataAccessLayer,CDataAccessLayer>();
}
3.Add Form1 which is currently my master Form and has the UI logic. Please register Form1 to above as services.
services.AddScoped<Form1>()
4.Adding DI Container:
Please update the Main() method as below.
We shall be injecting ILogger and IBusinessLayer object is as below.
[STAThread]
static void Main()
{
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var services = new ServiceCollection();
ConfigureServices(services);
using (ServiceProvider serviceProvider = services.BuildServiceProvider())
{
var form1 = serviceProvider.GetRequiredService<Form1>();
Application.Run(form1);
}
}
Here we are assuming Form1 is the master form that holds other forms together.
5.Add IBusinessObject and ILogger using DI to Forms App
public partial class Form1 : Form
{
private readonly ILogger _logger;
private readonly IBusinessLayer _business;
public Form1(ILogger<Form1> logger, IBusinessLayer business)
{
_logger = logger;
_business = business;
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
_logger.LogInformation("Form1 {BusinessLayerEvent} at {dateTime}", "Started", DateTime.UtcNow);
// Perform Business Logic here
_business.PerformBusiness();
MessageBox.Show("Hello .NET Core 3.0 . This is First Forms app in .NET Core");
_logger.LogInformation("Form1 {BusinessLayerEvent} at {dateTime}", "Ended", DateTime.UtcNow);
}
catch (Exception ex)
{
//Log technical exception
_logger.LogError(ex.Message);
//Return exception repsponse here
throw;
}
}
}
Best Regards,
Daniel Zhang
If the response is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.
Hi Daniel,
Thank you for example. I do understand that all class have to have an interface. How do I register dbContext for EF Core? Do you mind explaining that part? Thanks a lot.
Hi @Vojislav Ćeklić ,
Here is a document about configuring dbContext you can refer to.
Best Regards
Daniel Zhang