using System;
using System.Collections.Generic;
using System.Net.Mail;
namespace CSharpDi
{
public class Program
{
public static void Main()
{
typeof(SmtpClient).RegisterBuilder(p =>
new
{
Send = new Action<string, string, string, string>(
(from, to, subject, body) => { })
}
);
var tm = new TranferManager();
tm.Tranfer();
}
}
public class TranferManager
{
public void Tranfer()
{
// Perform the required actions
var smtpClient = New. SmtpClient();
smtpClient.Send("info@bank.com", "from.Email", "Tranfer", "?");
}
}
public static class New
{
public static dynamic SmtpClient(params object[] parameters)
{
return typeof(SmtpClient).New(parameters);
}
}
public static class CreationExtensions
{
private static Dictionary<Type, Func<object, dynamic>> builders =
new Dictionary<Type, Func<object, dynamic>>();
public static dynamic New(this Type type, params object[] parameters)
{
if(builders.ContainsKey(type))
return builders[type](parameters);
return Activator.CreateInstance(type, parameters);
}
public static void RegisterBuilder(this Type type, Func<object, dynamic> builder)
{
builders.Add(type, builder);
}
}
}