配置文件接口。通过在配置文件中配置工厂,在Unity中实现Client类构造函数自动注入。
/// <summary>
/// Interface for Factory
/// </summary>
/// <remarks>author Louis Liu http://wintersun.cnblogs.com </remarks>
public interface IFactory
{
ISmsProvider CreateSms();
IConfig CreateConfig();
}
public interface ISmsProvider
{
void ReadConfig(IConfig config);
}
public interface IConfig
{
string ConfigInfo();
}
public class SGIPFactory : IFactory
{
public ISmsProvider CreateSms()
{
return new SGIP();
}
public IConfig CreateConfig()
{
return new SGIPConfig();
}
}
public class SGIP : ISmsProvider
{
public void ReadConfig(IConfig config)
{
Console.WriteLine("SGIP readconfig with " + config.ConfigInfo());
}
}
public class SGIPConfig : IConfig
{
public string ConfigInfo()
{
return "SGIPCONFIG";
}
}
public class CMPPFactory : IFactory
{
public ISmsProvider CreateSms()
{
return new CMPP();
}
public IConfig CreateConfig()
{
return new SGIPConfig();
}
}
public class CMPP : ISmsProvider
{
public void ReadConfig(IConfig config)
{
Console.WriteLine("CMPP readconfig with "+config.ConfigInfo());
}
}
public class CMPPConfig : IConfig
{
public string ConfigInfo()
{
return "CMPPConfig";
}
}
/// <summary>
/// SmsPlatform
/// </summary>
/// <remarks>author Louis Liu http://wintersun.cnblogs.com </remarks>
public class SmsPlatform
{
private ISmsProvider smsProvider;
private IConfig config;
private IFactory factory1,factory2;
// Constructors auto inject
public SmsPlatform(IFactory factory)
{
smsProvider = factory.CreateSms();
config = factory.CreateConfig();
}
// Methods
public void Run()
{
smsProvider.ReadConfig(config);
}
}
配置文件:

调用代码:
private static void AnotherWays2()
{
IUnityContainer container = new UnityContainer();
UnityConfigurationSection section =
(UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Containers.Default.Configure(container);
SmsPlatform smf = container.Resolve<SmsPlatform>();
smf.Run();
Console.ReadLine();
}
http://wintersun.cnblogs.com/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)