1、NuGet引入Unity和Unity.Configuration;
2、新建接口ILanguage
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Unity.IOC.Framework.Api.Models
{
public interface ILanguage
{
string GetContent();
}
}
3、新建类Chinese和English
(1)Chinese类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Unity.IOC.Framework.Api.Models
{
public class Chinese:ILanguage
{
public string GetContent() {
return " This is Chinese!";
}
}
}
(2)English类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Unity.IOC.Framework.Api.Models
{
public class English:ILanguage
{
public string GetContent() {
return "This is English!";
}
}
}
4、新建类ServiceLocator
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Practices.Unity.Configuration;
using System.Configuration;
using Unity.Resolution;
namespace Unity.IOC.Framework.Api
{
public class ServiceLocator : IServiceProvider
{
private readonly IUnityContainer _container;
private static readonly ServiceLocator instance = new ServiceLocator();
private ServiceLocator()
{
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
_container = new UnityContainer();
section.Configure(_container);
}
public static ServiceLocator Instance
{
get { return instance; }
}
public object GetService(Type serviceType)
{
return _container.Resolve(serviceType);
}
/// <summary>
/// 获取依赖实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public T GetService<T>()
{
return _container.Resolve<T>();
}
/// <summary>
/// 获取依赖实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public T GetService<T>(params ParameterOverride[] obj)
{
return _container.Resolve<T>(obj);
}
/// <summary>
/// 获取依赖实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="name">别名</param>
/// <param name="obj"></param>
/// <returns></returns>
public T GetService<T>(string name,params ParameterOverride[] obj)
{
return _container.Resolve<T>(name, obj);
}
}
}
5、web.config的configuration下配置节点
<!--unity配置 start-->
<configSections>
<!--Microsoft.Practices.Unity.Configuration.UnityConfigurationSection: 命名空间 + 类名-->
<!--Unity.Configuration: 类库名称/程序集名称 -->
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
</configSections>
<unity>
<container>
<!--type对应值-->
<!--type:容器中配置的源类型。如果这是映射注册,这就是映射的起始对象的类型;如果这是单件注册,这就是对象的类型。此属性是必须的。-->
<!--Unity.IOC.Framework.Api.Models.ILanguage:命名空间 + 接口名-->
<!--Unity.IOC.Framework.Api:程序集名称-->
<!--mapTo对应值-->
<!--mapTo:类型映射的目标类型。如果这是映射注册,这就是映射的目标对象的类型。此属性是可选的。-->
<!--Unity.IOC.Framework.Api.Models.Chinese:命名空间 + 类名-->
<!--Unity.IOC.Framework.Api:程序集名称-->
<!--name:在注册此类型时使用的名称。此属性是可选的,如果不指定此属性,所在的 add 元素即为默认的类型映射。-->
<!--english:别名-->
<!--lifetime:设置用于给定的类型和名称的生命周期。是一个来自 LifetimeStyle 枚举的值。有效的值是 Transient(默认),它导致了容器每次都创建一个新的实例;
以及 Singleton,它使容器为每个请求返回同一实例。如果在配置一个单件时同时指定了 type 和 mapto 属性,SetSingleton 方法将返回指定在 mapTo 属性中的类型。
如果 mapTo 属性没有指定值,SetSingleton 方法将返回指定在 type 属性中的类型。-->
<register type="Unity.IOC.Framework.Api.Models.ILanguage,Unity.IOC.Framework.Api" mapTo="Unity.IOC.Framework.Api.Models.Chinese,Unity.IOC.Framework.Api"/>
<register type="Unity.IOC.Framework.Api.Models.ILanguage,Unity.IOC.Framework.Api" mapTo="Unity.IOC.Framework.Api.Models.English,Unity.IOC.Framework.Api" name="english">
<lifetime type="transient"></lifetime>
<!--<lifetime type="singleton"></lifetime>-->
<!--<lifetime type="hierarchical"></lifetime>-->
<!--<lifetime type="perresolve"></lifetime>-->
<!--<lifetime type="perthread"></lifetime>-->
<!--<lifetime type="ExternallyControlled"></lifetime>-->
</register>
</container>
</unity>
<!--unity配置 end-->
6、调用
ServiceLocator.Instance.GetService<ILanguage>().GetContent();

2904

被折叠的 条评论
为什么被折叠?



