MVC autofac 属性注入

Global文件

public class MvcApplication : System.Web.HttpApplication
    {
        private static IContainer Container { get; set; }
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            var builder = new ContainerBuilder();
            //根据名称约定(服务层的接口和实现均以Contract结尾),实现服务接口和服务实现的依赖
            builder.RegisterAssemblyTypes(Assembly.Load("BLOG.IBLL"), Assembly.Load("BLOG.BLL")).Where(t => t.Name.EndsWith("Contract")).AsImplementedInterfaces().PropertiesAutowired().InstancePerDependency();
            // 根据名称约定(数据访问层的接口和实现均以Repository结尾),实现数据访问接口和数据访问实现的依赖
            builder.RegisterAssemblyTypes(Assembly.Load("BLOG.IDAL"), Assembly.Load("BLOG.DAL")).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces().PropertiesAutowired().InstancePerDependency();
            builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
            Container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(Container));
        }
    }

控制器

public class DefaultController : Controller
    {
        //属性自动注入
        public IProvinceContract ProvinceContract { get; set; }
        // GET: Default
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult GetProvinceList()
        {
            var list = ProvinceContract.GetList(p => p.Id > 0);
            return Json(list);
        }
    }
PropertiesAutowired 属性注入

IBLL

public interface IProvinceContract
    {
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="where"></param>
        /// <returns></returns>
        IQueryable<Province> GetList(Expression<Func<Province, bool>> where);
    }

BLL

 public class ProvinceContrator: IProvinceContract
    {
        //属性自动注入
        public IProvinceRepository ProvinceRepository { get; set; }
        public IQueryable<Province> GetList(Expression<Func<Province, bool>> where)
        {
            return ProvinceRepository.GetList(where);
        }
    }

原文地址:https://www.cnblogs.com/xiaonangua/p/10783151.html

时间: 2024-10-08 02:46:44

MVC autofac 属性注入的相关文章

ASP.NET MVC Autofac依赖注入的一点小心得(包含特性注入)

前言 IOC的重要性 大家都清楚..便利也都知道..新的ASP.NET Core也大量使用了这种手法.. 一直憋着没写ASP.NET Core的文章..还是怕误导大家.. 今天这篇也不是讲Core的 前面写了C#开发移动应用系列  就第一篇和最后一篇上了最多推荐 - -  也许大家确实不看好吧.. 算了..废话不多说.开始今天的东西吧.. 本篇文章不讲为何我们要用IOC..只讲Autofac使用中的一些小心得 正文 1.基本注入 首先我们要构造一个容器,代码如下: //第一步: 构造一个Auto

ASP.NET MVC Autofac自动注入

依赖注入容器有很多插件,我用过Unity和Autofac,这两个插件给我最明显的感觉就是Autofac很快,非常的快,毕竟是第三方开发的,而Unity相对而言性能比较稳定 下面附上Autofac自动注入代码:(IDependency接口表示要注入的接口必须要继承它,WEB中必须要添加接口类库和接口实现类库,否则会注入失败),其实原理就是反射 using System.Linq; using System.Reflection; using System.Web.Compilation; usin

Autofac - 属性注入

属性注入不同于通过构造函数方式传入参数. 这里是通过注入的方式, 在类创建完毕之后, 资源释放之前, 给属性赋值. 这里, 我重新弄一些类来演示这一篇吧. public class ClassA { private readonly ClassB b; public ClassA(ClassB b) { this.b = b; } public void Show() { Console.WriteLine("I am ClassA's instance !"); } } public

ASP.NET Core中使用Autofac进行属性注入

一些无关紧要的废话: 作为一名双修程序员(自封的),喜欢那种使用Spring的注解形式进行依赖注入或者Unity的特性形式进行依赖注入,当然,形式大同小异,但结果都是一样的,通过属性进行依赖注入. ASP.NET Core中使用了自带的Dependency Injection作为了默认的IOC容器,当然有先天的优势,很多还是喜欢切换到Autofac作为IOC容器,Unity在.Net Core中还是有很大的优势的,但据我所知,Unity5已经由微软转交到基金会了,而且本身文档很少,翻译文档以及研

Autofac 的属性注入,IOC的坑

Autofac 是一款优秀的IOC的开源工具,完美的适配.Net特性,但是有时候我们想通过属性注入的方式来获取我们注入的对象,对不起,有时候你还真是获取不到,这因为什么呢? 1.你对Autofac 不太了解,在这个浮躁的社会,没有人会认真的了解每个开源项目,只要求能用就行 2.没有时间了解,你是一个很忙的人,工作很忙,应酬很忙 3.刚开始使用Autofac 还没来得及深入了解就要做项目. 不管是什么原因,总之我们注入的属性就是无法直接由autofac 自动注入,或者说我们希望由Autofac自动

Autofac 的属性注入方式

介绍 该篇文章通过一个简单的 ASP.NET MVC 项目进行介绍如何使用 autofac 及 autofac 的 MVC 模块进行依赖注入.注入方式通过构造函数.在编写 aufofac 的依赖注入代码之前先准备一些基础类. 基础类 public class UserInfo { public int Id { get; set; } public string Name { get; set; } } public interface IRepository<T> { void Add( T

ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)

前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 目录 ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器) ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入) ASP.NET Core中使用IOC三部曲(三.采用替换后的Autofac来实现AOP拦截) 正文 上

ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用

上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的使用. PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在WebForm页面将主要采用属性注入的方式. 接下来我们正式进入主题,在上一章的基础上我们再添加一个web项目TianYa.DotNetShare.WebDemo,首先看我们的解决方案 本demo的web项目为ASP.NET Web 应用程序(.NET Framework 4.5) 空Web窗体,需要引用

ASP.NETCore 3.0 Autofac替换及控制器属性注入及全局容器使用

1.Autofac基础使用 参考: https://www.cnblogs.com/li150dan/p/10071079.html 2.ASP.NETCore 3.0 Autofac 容器替换 需要引用:Autofac, Autofac.Extensions.DependencyInjection 在Program.cs 使用AutofacServiceProviderFactory进行容器替换. public static IHostBuilder CreateHostBuilder(str