1. 程式人生 > >C# MVC IOC、依賴註入

C# MVC IOC、依賴註入

assembly tof package 組件 流行 獲取 .dll pack exe

在MVC5中依賴註入,本文介紹通過掃描類型RegisterAssemblyTypes來進行註冊

另外還有掃描模塊RegisterAssemblyModules來註冊

使用Autofac框架進行組件的依賴註入

Autofac是.NET領域最為流行的IOC框架之一,傳說是速度最快的一個

先通過Nuget安裝程序包

PM> install-package atuofac

PM> install-package atuofac.mvc5

一般的做法是設計一個空的IDependency的接口,讓所有想要加入到IOC中的類實現這個接口

    interface IDependency
    {
    }
    public class NormalService:IDependency
    {
        public string testIoc()
        {
            return "IoC Test";
        }
    }

在Global中進行設置

添加引用

using Autofac;
using Autofac.Integration.Mvc;//註冊Controller時需要

            //獲取已加載到此應用程序域的執行上下文中的程序集。
            Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies().ToArray();
// Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray(); //var assemblies = Assembly.GetExecutingAssembly(); //創建autofac管理註冊類的容器實例 ContainerBuilder builder = new ContainerBuilder();
//註冊所有實現了 IDependency 接口的類型 Type baseType = typeof(IDependency); builder.RegisterAssemblyTypes(assemblies) .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract) .AsSelf().AsImplementedInterfaces() .PropertiesAutowired() .InstancePerLifetimeScope(); // 設置MVC的DependencyResolver註冊點 builder.RegisterControllers(assemblies) .AsSelf() .PropertiesAutowired() .InstancePerLifetimeScope(); DependencyResolver.SetResolver(new AutofacDependencyResolver(builder.Build()));

NormalService的使用

        public NormalService normalService { get; set; }

        [HttpGet]
        public JsonResult GetIocMethod()
        {
            string strIocReturn= normalService.testIoc();
            return Json(strIocReturn,JsonRequestBehavior.AllowGet);
        }

如果NormalService是實現接口INormalService的話

    public interface INormalService
    {
         string testIoc();
    }
    public class NormalService:IDependency,INormalService
    {
        public string testIoc()
        {
            return "IoC Test";
        }
    }
        public INormalService normalService { get; set; }

        [HttpGet]
        public JsonResult GetIocMethod()
        {
            string strIocReturn= normalService.testIoc();
            return Json(strIocReturn,JsonRequestBehavior.AllowGet);
        }

除了通過統一實現IDependency的方式來進行註冊外,單個類型的註冊

            builder.RegisterType<NormalService>().As<INormalService>()
                .AsSelf()
                .PropertiesAutowired()
                .InstancePerLifetimeScope();

builder.RegisterType<DbContextScopeFactory>().As<IDbContextScopeFactory>()
.AsSelf().AsImplementedInterfaces()
.InstancePerLifetimeScope().PropertiesAutowired();



這些就是在MVC中進行依賴註入的方式

C# MVC IOC、依賴註入