控制反转,依赖注入不在此文做介绍,这里主要介绍一种实现方式Unity。由于在工作中会遇到客户需求相同,实现方式不同的问题;譬如客户的服务器会传来XML格式的数据或者Json格式的数据,譬如上传服务器文件是传到FTP服务器或是传到数据库中。这些当然也能用if else来判断,但是我们决定还是用接口来实现。接下来我就来介绍Unity自己写的一个Demo。
1.首先通过Nuget下载Unity。
2.新建一个序列化和反序列化的接口以及两个类,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UnityConsole
{
public interface ISerialize //序列化和反序列化接口
{
string Serialize(object obj); //序列化
Object Deserialize(string str); //反序列化
string Version();
}
public class XMLSerialize : ISerialize
{
public object Deserialize(string str)
{
throw new NotImplementedException();
}
public string Serialize(object obj)
{
throw new NotImplementedException();
}
public string Version()
{
return "XMLSerialize";
}
}
public class JsonSerialize : ISerialize
{
object ISerialize.Deserialize(string str)
{
throw new NotImplementedException();
}
string ISerialize.Serialize(object obj)
{
throw new NotImplementedException();
}
string ISerialize.Version()
{
return "JsonSerialize";
}
}
}
3.配置App.config文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!--must first-->
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration" />
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<containers>
<container>
<register type="UnityConsole.ISerialize,UnityConsole" mapTo="UnityConsole.XMLSerialize,UnityConsole" />
</container>
</containers>
</unity>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
注意事项:配置文件中container中的UnityConsole是命名空间,ISerialize是接口,mapTo中XMLSerialize是实现接口的类
XMLSerialize可替换成JsonSerialize
4.在项目中添加引用System.Configuration
5.在主程序中分别添加
using Microsoft.Practices.Unity.Configuration;
using System.Configuration;
using Unity;
6.主函数代码如下:
using (IUnityContainer container = new UnityContainer())
{
UnityConfigurationSection config = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
config.Configure(container);
ISerialize serialize = container.Resolve<ISerialize>();
Console.WriteLine("版本信息:{0}", serialize.Version());
}
Console.ReadLine();
注意事项:在这个小demo中主要是将配置文件和接口捆绑在了一起,具体调用哪个类通过配置文件就可以实现自由切换,不再需要主程序去做判断,这个事情从主程序移交给了Unity来实现。