ASP.NET AutoFac 依赖注入问题(跨程序集注入问题)

问题描述

示例一:我一个接口publicinterfaceITest{stringDisplay();}publicclassTestRepository:ITest{publicstringDisplay(){return"AutoFac"}}publicclassHomeController{privateITesttest=null;publicHomeController(ITest_test){this.test=_test;}}通过Global.asax.cs文件实现依赖注入protectedvoidApplication_Start(){AreaRegistration.RegisterAllAreas();#regionAutofac注入依赖varbuilder=newContainerBuilder();SetupResolveRules(builder);builder.RegisterControllers(Assembly.GetExecutingAssembly());varcontainer=builder.Build();DependencyResolver.SetResolver(newAutofacDependencyResolver(container));#endregionWebApiConfig.Register(GlobalConfiguration.Configuration);FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}privatestaticvoidSetupResolveRules(ContainerBuilderbuilder){builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())//应该问题在这句话上面,但是如果全部在一个csproj里面又是对的,等待大神解决.Where(t=>t.Name.EndsWith("Repository")).AsImplementedInterfaces();}问题如下如果上面的接口是一个类库、实现也是一个类库就出错了,如果所有文件都在同一个csproj里面就没错了,如果分层实现就报错:Noneoftheconstructorsfoundwith'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'ontype'MvcApplication2.Controllers.HomeController'canbeinvokedwiththeavailableservicesandparameters:Cannotresolveparameter'Interface.ITest_test'ofconstructor'Void.ctor(Interface.ITest)'.

解决方案

解决方案二:
通过builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Where(t=>t.Name.EndsWith("Repository")).AsImplementedInterfaces();是为了实现多个类,我现在有可能是TestRepository,后面要添加OpenRepository类哪就只用学业务就够了

时间: 2024-09-02 01:58:21

ASP.NET AutoFac 依赖注入问题(跨程序集注入问题)的相关文章

NopCommerce架构分析(一)Autofac依赖注入类生成容器_自学过程

NopCommerce为了实现松耦合的框架设计目的,使用了IOC框架:Autofac.据有人测试,Autofac是性能很好的IOC工具. 1.在IOC中,组件首先需要在IOC中注册,有通过配置文件注册的.像Spring.net,也有通过特性注册的,像StructureMap,也有通过代理来注册的,像Autofac.但是IOC讲究一个原则,就是接口和实现分离.所有IOC就是生命某个具体类实现了某个接口.然后在使用时,系统从IOC中获取接口的实现类,并创建对象. 2.下面来看NopCommerce如

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(6)-Unity 2.x依赖注入by运行时注入[附源码]

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(6)-Unity 2.x依赖注入by运行时注入[附源码] Unity 2.x依赖注入(控制反转)IOC,对于没有大项目经验的童鞋来说,这些都是陌生的名词,甚至有些同学还停留在拉控件的阶段. 您可以访问http://unity.codeplex.com/releases得到最新版本的Unity现在.当然,如果您在您的visual studio 中安装了Nuget 包管理器,你可以直接在Nuget中获取到最

ASP通用防注入代码.杜绝SQL注入隐患.提升网站安全

ASP通用防注入代码.杜绝SQL注入隐患.提升网站安全 <% '''''''''''''''''''''''''''''''''''''''''''''''' 'ASP通用防注入代码 '您可以把该代码COPY到头文件中.也可以单独作 '为一个文件存在,每次调用使用 '作者:y3gu - 2005-7-29 '''''''''''''''''''''''''''''''''''''''''''''''' Dim GetFlag Rem(提交方式) Dim ErrorSql Rem(非法字符) Di

ASP.NET 2.0中实现跨页面提交

asp.net|页面 在ASP.NET 1.X 版本中,页面都是提交到自己本身,并不能方便的指定需要提交的目的页面.例如FirstPage.aspx中的button只能提交到FirstPage.aspx,而不能提交到SecondPage.aspx.很多时候,ASP.NET 1.X这样工作方式使我们的开发方式受到不少限制.熟悉ASP/JSP/PHP的朋友大概很不习惯,因为以前经常使用的提交方式突然无法使用,虽然也有解决这个问题的方法(演示Webcast),可是过程太烦琐,不甚方便.令我们高兴的是,

在ASP.NET 2.0中实现跨页面提交

在ASP.NET 1.X 版本中,页面都是提交到自己本身,并不能方便的指定需要 提交的目的页面.例如FirstPage.aspx中的button只能提交到FirstPage.aspx, 而不能提交到SecondPage.aspx.很多时候,ASP.NET 1.X这样工作方式使我们的 开发方式受到不少限制.熟悉ASP/JSP/PHP的朋友大概很不习惯,因为以前经常 使用的提交方式突然无法使用,虽然也有解决这个问题的方法(欲详细了解的读 者可去微软网站收看webcast),可是过程太烦琐,不甚方便.

谈谈如何在ASP.NET Core中实现CORS跨域_实用技巧

CORS(Cross-origin resource sharing)是一个W3C标准,翻译过来就是 "跨域资源共享",它主要是解决Ajax跨域限制的问题. CORS需要浏览器和服务器支持,现在所有现代浏览器都支持这一特性.注:IE10及以上 只要浏览器支持,其实CORS所有的配置都是在服务端进行的,而前端的操作浏览器会自动完成. 在本例中,将演示如何再ASP.NET Core中实现CORS跨域. 前期准备 你需要windows系统. 你需要安装IIS. 推荐使用VS2015 Upda

关于跨程序集的反射

    在开发中,经常会遇到这种情况,在A.dll中需要反射B.dll中的类型,如果稍不注意,就会产生运行时错误.关于跨程序集的反射,记住两点就可以:(1)如果使用typeof,编译能通过,则跨程序集的反射一定可以正常运行.可以说,typeof是支持强类型的.比如 Type supType = typeof(EnterpriseServerBase.DataAccess.IDBAccesser) ;     如果当前程序集没有添加对EnterpriseServerBase.dll的引用,则编译会

关于跨程序集的反射(续)

    以前曾写过一篇"关于跨程序集的反射"的blog,关于跨程序集加载类型,文中使用的是方法是:先加载目标类型所在的程序集,再使用Assembly. GetType方法获取类型.文后Luna兄的评论说,可以直接使用Type.GetType("<<完全限定类名>>,<<程序集>>")来加载类型,当初我查了MSDN,MSDN中也说到了这一点,我也就记住了这个解决方案.但是,今天使用这种方式来跨程序集进行类型加载时,却始终

Spring——setter方式注入和构造函数方式注入

     先写一个比较常见的结构:            其中UserDao跟UserManagerImpl是层与层之间的接口.       下面用这些类来演示setter方式注入跟构造函数注入来解决Manager层注入Dao问题. 一,setter方式注入         首先要在Manager实现类中定义Dao的私有成员变量,并为此变量添加set方法,注入的时候会自动调用这个set方法对成员变量进行赋值.               之后在配置文件中定义依赖关系:            <b