• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NET MVC IOC 之 Autofac(一)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

新建一个MVC项目,如 AutoFacTest,引用autofac,如下图:

 

接下来就是开始进行编程了

首先,新建一个类库,名为 AutoFacTest.Service,该类库编写服务层代码,我们的接口和实现就都放在服务层

新建一个IStudentService.cs 接口,具体代码如下:

namespace AutoFacTest.Service
{
   public interface IStudentService
   {
       int GetStudentAge(string name);
   }
}

接着,新建一个实现类 StudentService.cs ,继承IStudentService,如下:

namespace AutoFacTest.Service.impl
{
   public class StudentService:IStudentService
    {
       public int GetStudentAge(string name)
       {
           int age = 0;
           switch (name)
           {
                case "张三":
                   age = 10;break;
                case "李四":
                   age = 12;break;

           }
           return age;
       }
    }
}

定义了一个方法,根据姓名获取年龄。

服务层准备好了,接下来就是开始做注入工作了。

打开Global.cs 文件

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            AutoFacRegister(); //注入
        }

        private void AutoFacRegister()
        {
            var builder = new ContainerBuilder();
            //注册MVC控制器(注册所有到控制器,控制器注入,就是需要在控制器的构造函数中接收对象)
            builder.RegisterControllers(typeof(MvcApplication).Assembly);
            /*接口实现,构造函数注入,对StudentService与接口进行注入*/
            builder.RegisterType<StudentService>().As<IStudentService>();

            //设置依赖解析器
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
    }

 至此,完成第一步的注入。此方式为构造函数注入的方式。
接下来就是见证结果的时刻了,我们来看看控制器里面怎么弄。

新建一个控制器 Home,上控制器代码。

 public class HomeController : Controller
    {
        public IStudentService Stu; //定义全局的学生抽象类对象
        /// <summary>
        /// 通过构造函数进行注入,注意,参数是抽象类,非实现类。因为已经在global中将实现类映射给了抽象类
        /// </summary>
        /// <param name="stu"></param>
        public HomeController(IStudentService stu)
        {
            this.Stu = stu;
        }
        // GET: Home
        public void Index()
        {
            Response.Write("学生类:"+ Stu.GetStudentAge("张三")+"<br />");
        }
    }

至此,完成处理,接下来,我们就访问 index,看是否能放回张三的年龄。

我们可以发现,返回了张三的年龄。说明我们注入成功了。

 

总结:

1、采用的是构造函数注入的方式,在构造函数中初始化赋值。

2、Stu对象不需要实例化,即不需要new。降低了系统资源的消耗。

3、需要在global中对StudentService写映射,如果服务类比较多的时候,就需要写很多,如何避免,这个在后面章节讲解。

 

扩展: 上面讲解了 构造函数注入的方式,下面扩展属性注入的方式。

在global.cs中稍微修改下注入语句即可。

将:

 builder.RegisterControllers(typeof(MvcApplication).Assembly);

改为:

builder.RegisterControllers(typeof (MvcApplication).Assembly).PropertiesAutowired();
PropertiesAutowired:即,表示允许属性注入。

接下来我们来看怎么使用。
 public class HomeController : Controller
    {
        public IStudentService Stu { get; set; } //定义全局的学生抽象类对象
        /// <summary>
        /// 通过构造函数进行注入,注意,参数是抽象类,非实现类。因为已经在global中将实现类映射给了抽象类
        /// </summary>
        // GET: Home
        public void Index()
        {
            Response.Write("学生类:"+ Stu.GetStudentAge("张三")+"<br />");
        }
    }

控制器里面写的代码就简单很多了。

注意:Stu必须定义为public类型,否则将映射失败。



 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【转】【Asp.Net】ASP.NetResponse.ContentType详细列表发布时间:2022-07-10
下一篇:
js技巧收集(200多个)(转自:asp.net中文俱乐部)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap