控制器中使用
public class IOCController : ApiController
{
private IUserService _UserService = null;
public IOCController(IUserService userService)
{
this._UserService = userService;
}
public string Get(int id)
{
return Newtonsoft.Json.JsonConvert.SerializeObject(this._UserService.Query(id));
}
}
DI注入相关类
public class UnityDependencyResolver : IDependencyResolver
{
private IUnityContainer _UnityContainer = null;
public UnityDependencyResolver(IUnityContainer container)
{
_UnityContainer = container;
}
public IDependencyScope BeginScope()
{
return new UnityDependencyResolver(this._UnityContainer.CreateChildContainer());
}
public void Dispose()
{
this._UnityContainer.Dispose();
}
public object GetService(Type serviceType)
{
try
{
return ContainerFactory.BuildContainer().Resolve(serviceType);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return ContainerFactory.BuildContainer().ResolveAll(serviceType);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
}
public class ContainerFactory
{
public static IUnityContainer BuildContainer()
{
return _Container;
}
private static IUnityContainer _Container = null;
static ContainerFactory()
{
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "CfgFiles\\Unity.Config");
Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName);
_Container = new UnityContainer();
section.Configure(_Container, "WebApiContainer");
}
}
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
</configSections>
<unity>
<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Unity.Interception.Configuration"/>
<containers>
<container name="WebApiContainer">
<extension type="Interception"/>
<register type="Ruanmou.SOA.Interface.IUserService,Ruanmou.SOA.Interface" mapTo="Ruanmou.SOA.Service.UserService, Ruanmou.SOA.Service">
<!--
<interceptor type="InterfaceInterceptor"/>
<interceptionBehavior type="Ruanmou.Framework.AOP.LogBeforeBehavior, Ruanmou.Framework"/>
<interceptionBehavior type="Ruanmou.Framework.AOP.LogAfterBehavior, Ruanmou.Framework"/>
<interceptionBehavior type="Ruanmou.Framework.AOP.ParameterCheckBehavior, Ruanmou.Framework"/>
<lifetime type="transient" />-->
</register>
</container>
</containers>
</unity>
</configuration>
路由注入
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.DependencyResolver = new UnityDependencyResolver(ContainerFactory.BuildContainer());
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}