(精华)2020年8月17日 微服务 WebApi注入unity容器实现面向切面
发布日期:2021-06-29 15:10:04 浏览次数:2 分类:技术文章

本文共 3369 字,大约阅读时间需要 11 分钟。

控制器中使用

public class IOCController : ApiController{
private IUserService _UserService = null; public IOCController(IUserService userService) {
this._UserService = userService; } public string Get(int id) {
//IUserService service = new UserService(); //IUserService service = ContainerFactory.BuildContainer().Resolve
(); 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()//Scope {
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 GetServices(Type serviceType) {
try {
return ContainerFactory.BuildContainer().ResolveAll(serviceType); } catch (Exception ex) {
Console.WriteLine(ex.Message); return null; } }}
/// /// 需要在nuget引用之后,单独引用Unity.Configuration/// 如果有AOP扩展,还需要引用Unity.Interception.Configuration/// 因为我们是用配置文件来做的配置/// public class ContainerFactory{
public static IUnityContainer BuildContainer() {
//get //{
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"); }}

路由注入

public static class WebApiConfig{
public static void Register(HttpConfiguration config) {
// Web API 配置和服务 config.DependencyResolver = new UnityDependencyResolver(ContainerFactory.BuildContainer()); // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi",//默认的api路由 routeTemplate: "api/{controller}/{id}",//正则规则,以api开头,第二个是控制器 第三个是参数 defaults: new {
id = RouteParameter.Optional } ); // config.Routes.MapHttpRoute( // name: "CustomApi",//默认的api路由 // routeTemplate: "api/{controller}/{action}/{id}",//正则规则,以api开头,第二个是控制器 第三个是参数 // defaults: new { id = RouteParameter.Optional } //); }}

转载地址:https://codeboy.blog.csdn.net/article/details/108055246 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(精华)2020年8月17日 ASP.NET Core EF+Mysql 从数据库生成实体类到项目
下一篇:(精华)2020年8月17日 浏览器渲染引擎与阻塞

发表评论

最新留言

不错!
[***.144.177.141]2024年05月01日 20时54分21秒