165 lines
4.2 KiB
C#
165 lines
4.2 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace DependencyInjections
|
|
{
|
|
public class ImplementDependencyInjections
|
|
{
|
|
public void Implement()
|
|
{
|
|
ServiceCollection serviceCollection = new ServiceCollection();
|
|
|
|
serviceCollection.AddTransient<ILogger, ConsoleLogger>();
|
|
serviceCollection.AddTransient<ILogger, FileLogger>();
|
|
serviceCollection.AddTransient<UserService>();
|
|
|
|
|
|
// Byt de 2 udkommentering for at skrifte processor
|
|
|
|
bool usePaypal = false;
|
|
|
|
if (usePaypal)
|
|
{
|
|
serviceCollection.AddTransient<IPaymentProcessor, PayPalPaymentProcessor>();
|
|
}
|
|
else
|
|
{
|
|
serviceCollection.AddTransient<IPaymentProcessor, StripePaymentProcessor>();
|
|
}
|
|
|
|
serviceCollection.AddTransient<CheckoutService>();
|
|
|
|
serviceCollection.AddTransient<IEmailSender, SmtpEmailSender>();
|
|
serviceCollection.AddTransient<IEmailSender, ConsoleEmailSender>();
|
|
|
|
serviceCollection.AddTransient<NotificationService>();
|
|
|
|
var sp = serviceCollection.BuildServiceProvider();
|
|
|
|
sp.GetRequiredService<UserService>().Log();
|
|
sp.GetRequiredService<CheckoutService>().process();
|
|
sp.GetRequiredService<NotificationService>().SendNotification("Hello, There");
|
|
|
|
}
|
|
}
|
|
|
|
public interface ILogger
|
|
{
|
|
void Log(string message);
|
|
}
|
|
|
|
public class ConsoleLogger : ILogger
|
|
{
|
|
public void Log(string message)
|
|
{
|
|
Console.WriteLine(message);
|
|
}
|
|
}
|
|
|
|
public class FileLogger : ILogger
|
|
{
|
|
public void Log(string message)
|
|
{
|
|
var currentPath = Directory.GetCurrentDirectory();
|
|
|
|
var path = Path.Combine(currentPath, "test.txt");
|
|
|
|
using (StreamWriter sw = File.AppendText(path))
|
|
{
|
|
sw.WriteLine(message);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class UserService
|
|
{
|
|
private readonly IEnumerable<ILogger> logger;
|
|
|
|
public UserService(IEnumerable<ILogger> logger)
|
|
{
|
|
this.logger = logger;
|
|
}
|
|
|
|
public void Log()
|
|
{
|
|
foreach (var log in logger)
|
|
{
|
|
log.Log("Hello from user service");
|
|
}
|
|
}
|
|
}
|
|
|
|
public interface IPaymentProcessor
|
|
{
|
|
void Process(decimal amount);
|
|
}
|
|
|
|
public class StripePaymentProcessor : IPaymentProcessor
|
|
{
|
|
public void Process(decimal amount)
|
|
{
|
|
Console.WriteLine($"Stripe processing for {amount}...");
|
|
}
|
|
}
|
|
|
|
public class PayPalPaymentProcessor : IPaymentProcessor
|
|
{
|
|
public void Process(decimal amount)
|
|
{
|
|
Console.WriteLine($"Paypal processing for {amount}...");
|
|
}
|
|
}
|
|
|
|
public class CheckoutService
|
|
{
|
|
private readonly IPaymentProcessor paymentProcessor;
|
|
|
|
public CheckoutService(IPaymentProcessor paymentProcessor)
|
|
{
|
|
this.paymentProcessor = paymentProcessor;
|
|
}
|
|
|
|
public void process()
|
|
{
|
|
paymentProcessor.Process(5);
|
|
}
|
|
}
|
|
|
|
public interface IEmailSender
|
|
{
|
|
void SendEmail(string to, string subject, string body);
|
|
}
|
|
|
|
public class ConsoleEmailSender : IEmailSender
|
|
{
|
|
public void SendEmail(string to, string subject, string body)
|
|
{
|
|
Console.WriteLine($"To: {to} subject: {subject} body: {body}");
|
|
}
|
|
}
|
|
|
|
public class SmtpEmailSender : IEmailSender
|
|
{
|
|
public void SendEmail(string to, string subject, string body)
|
|
{
|
|
Console.WriteLine($"SENDING EMAIL:: To: {to} subject: {subject} body: {body}");
|
|
}
|
|
}
|
|
|
|
public class NotificationService
|
|
{
|
|
private readonly IEnumerable<IEmailSender> emailSender;
|
|
|
|
public NotificationService(IEnumerable<IEmailSender> emailSender)
|
|
{
|
|
this.emailSender = emailSender;
|
|
}
|
|
|
|
public void SendNotification(string message)
|
|
{
|
|
foreach (var sender in emailSender)
|
|
{
|
|
sender.SendEmail("test", "Notification", message);
|
|
}
|
|
}
|
|
}
|
|
} |