项目使用的MVC4,.net 4.5 Nuget安装最新的autofac,一直提示不支持.net 4.5。没办法了,最后用Nuget控制台安装的老版本。因为我使用的是MVC4,所以直接安装的是autofac mvc4的集成。

命令:

Install-Package Autofac.Mvc4

  安装成功。

示例如下:

            var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<Cms.BLL.SysManagementService>().As<ISysManagementService>();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

  第一行声明IoC的builder

第二行绑定程序集中的Controllers

第三行注入我们需要的接口对应的实现

第四行获取IoC的容器

第五行,利用MVC的依赖解析接口,将autofac的依赖解析传入

需要特别注意第二行:要注册的Controllrs所在的程序集。也就说,如果Controllers是一个独立的项目,那么需要传递相应的程序集名称。示例如下:

            var builder = new ContainerBuilder();
Assembly[] asm = GetAllAssembly("*.Controllers.dll").ToArray(); builder.RegisterControllers(asm);
builder.RegisterType<Cms.BLL.SysManagementService>().As<ISysManagementService>();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

  

  /// <summary>
/// 获取dll中Controller程序集
/// </summary>
/// <param name="dllName"></param>
/// <returns></returns>
private static List<Assembly> GetAllAssembly(string dllName)
{
List<string> pluginpath = FindPlugin(dllName);
var list = new List<Assembly>();
foreach (string filename in pluginpath)
{
try
{
string asmname = Path.GetFileNameWithoutExtension(filename);
if (asmname != string.Empty)
{
Assembly asm = Assembly.LoadFrom(filename);
list.Add(asm);
}
}
catch (Exception ex)
{
Console.Write(ex.Message);
}
}
return list;
} /// <summary>
/// 查找dll路径
/// </summary>
/// <param name="dllName"></param>
/// <returns></returns>
private static List<string> FindPlugin(string dllName)
{
List<string> pluginpath = new List<string>(); string path = AppDomain.CurrentDomain.BaseDirectory;
string dir = Path.Combine(path, "bin");
string[] dllList = Directory.GetFiles(dir, dllName);
if (dllList.Length > 0)
{
pluginpath.AddRange(dllList.Select(item => Path.Combine(dir, item.Substring(dir.Length + 1))));
}
return pluginpath;
}

  参考:http://www.lxway.com/45068094.htm

(这个点上坑了半天,一直报错“没有为该对象定义无参数的构造函数”,以为是autofac没入门,自己代码写错了。其实是自己分切了Controllers为独立项目,结果还一直在绑定Mvc的程序集,所以根本找不到注入)

asp.net MVC中使用Autofac小结 (遇到的最傻错误: 没有为该对象定义无参数的构造函数)的更多相关文章

  1. ASP.NET LinqDataSource数据绑定后,遇到[MissingMethodException: 没有为该对象定义无参数的构造函数。]问题。

    问题出现的情形:LinqDataSource数据绑定到DetailsView或GridView均出错,错误如下: “/”应用程序中的服务器错误. 没有为该对象定义无参数的构造函数. 说明: 执行当前 ...

  2. asp.net MVC 错误信息“没有为该对象定义无参数的构造函数”请求各位大神帮忙!

    在做一个登录的功能,没有用MVC自己生成的identity代码,仿照别人的代码写出了以后出现错误. 错误信息如下: 代码如下: 求各位asp.net大神支招,网上找了资料最终也没解决这个问题.

  3. 在Mvc中进行异步请求是出现(没有为该对象定义无参数的构造函数)

    解决办法就是给相应的类添加无参数的构造函数:

  4. .Net Framework 4.5.1 ASP.NET MVC 5 下新建视图报“错误 运行所选代码生成器时出错 无法检索元数据 没有为该对象定义无参数构造函数”

    当在控制器中新建视图的时候,选择的视图界面如下: 执行添加后报如下错误: 错误的内容为: 错误运行所选代码生成器时出错 无法检索"XXX"的元数据没有为该对象定义无参数构造函数 U ...

  5. Ioc容器Autofac系列(2)-- asp.net mvc中整合autofac

    经过上篇蜻蜓点水的介绍后,本篇通过实例快速上手autofac,展示当asp.net mvc引入了autofac之后会带来什么. 创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点 ...

  6. Asp.net mvc中整合autofac

    创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点,为方便起见,选初始带HomeController和AccountController的那种.然后通过NuGet或到Autofa ...

  7. 如何在asp.net mvc 中使用Autofac 控制反转(Ioc)

    前言 最近看了一些关于Ioc方面的开源项目,里面的类跳来转去,看的迷迷糊糊的.项目里根本不需要这么“复杂的”设计,只需简单完成Ico,达到解耦的目的,并且能高效的完成项目.于是参考autofac的官网 ...

  8. Asp.net mvc中应用autofac

    1.nuget安装依赖

  9. 在ASP.NET MVC中使用IIS级别的URL Rewrite

    原文 在ASP.NET MVC中使用IIS级别的URL Rewrite 大约一年半前,我在博客上写过一系列关于URL Rewrite的文章(2.3.4),把ASP.NET平台上进行URL Rewrit ...

随机推荐

  1. java如何避免死锁

    在有些情况下死锁是可以避免的.本文将展示三种用于避免死锁的技术: 加锁顺序 加锁时限 死锁检测 加锁顺序 当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生. 如果能确保所有的线程都 ...

  2. 还在为小三角形切图?使用纯CSS写一个简单的三角形

    同学们,当美工给的设计图是这样: 或者这样: 我的内心其实是拒绝的-_-:但工作还得干,大部分同学会写 <style> .icon{width:20px;height:20px;displ ...

  3. XAF-列表视图编辑模式

    下面来看看XAF中列表有哪些编辑模式: 一.inline编辑 下图说明了WinForms和ASP.NET应用程序中的可编辑列表视图. 在win中,这个很友好,就像excel中编辑一样.5星功能^_^. ...

  4. IronPython .NET Integration官方文档翻译笔记

    http://ironpython.net/documentation/dotnet/这是原文地址 以下笔记仅记录阅读过程中我认为有必要记录的内容,大多数都是依赖翻译软件的机翻,配合个人对代码的理解写 ...

  5. WebADI应用到Office 2016 64-bit

    升级后的用户环境: Windows 2016 bit Office 2016 64 bit IE 11 64 bit 功能定义 功能:CUX_LINE_IMP_ADI 类型:SSWA servlet ...

  6. mysql数据恢复问题

    现象 mysql> drop database zabbix; Query OK, 104 rows affected (0.30 sec)mysql> exitBye[root@mysq ...

  7. oracle 增加表空间

    1.表空间使用情况 SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D ...

  8. js实现购买数量加减效果

    写在前面:当我们需要在多个页面都有操作数量的需求时的一种解决方案 结构: js代码: <script type="text/javascript"> function ...

  9. 免费SSL证书申请

    https://buy.wosign.com/free/#apply 和 http://www.startssl.com/

  10. WEB典型应用