autofac 仓储_在框架分层的情况下成功使用AutoFac控制反转!

本文档详细描述了一个.NET开发者在使用MVC框架时遇到的依赖注入问题。开发者在尝试使用Autofac进行依赖注入时,在Global.asax文件的Application_Start方法中配置注册组件,但无法在数据服务层和业务处理层获取实例。解决方案可能涉及检查Autofac的注册和解析设置,确保所有必要的层和接口都被正确地注册和引用。
摘要由CSDN通过智能技术生成

跪求解决方案!

我的框架是MVC模式的.NET框架,

包含框架核心层,分数据服务接口层、数据服务层、业务处理接口层、业务处理层,表现层

表现层引用业务处理接口层,

业务处理层引用数据服务接口层、业务处理接口层,

数据服务层引用数据服务接口层,框架核心层的仓储接口

然后在表现层的Global.asax文件中的Application_Start方法中调用如下代码进行依赖注入

但是无法获取到数据服务层、及业务处理层的实例

求解决!

using Autofac;

using Autofac.Integration.Mvc;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Reflection;

using System.Web;

using System.Web.Mvc;

namespace MicroCloud.Admin

{

public class AutoFacConfig

{

public static void RegisterAutoFac()

{

var builder = new ContainerBuilder();

//加载层的控制器,否则无法在其他层控制器构造注入,只能在web层注入

Assembly[] asm = GetAllAssembly("MicroCloud.Admin.dll").ToArray();

builder.RegisterAssemblyTypes(asm);

//注册服务

Assembly[] asmServices = GetAllAssembly("MicroCloud.DataServices.dll").ToArray

();

builder.RegisterAssemblyTypes(asmServices)

.Where(t => t.Name.EndsWith("Service")&&t.Name!= "BaseService" && t.Name !=

"BaseTableService")

.AsImplementedInterfaces();

//注册业务

Assembly[] asmBusiness = GetAllAssembly("MicroCloud.Business.dll").ToArray();

builder.RegisterAssemblyTypes(asmBusiness)

.Where(t => t.Name.EndsWith("Business"))

.AsImplementedInterfaces();

builder.RegisterControllers(Assembly.GetExecutingAssembly());

builder.RegisterModelBinders(Assembly.GetExecutingAssembly());

builder.RegisterModelBinderProvider();

//注册过滤器

//builder.RegisterFilterProvider();

//builder.RegisterType().PropertiesAutowired();

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

var container = builder.Build();

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

}

#region 加载程序集

public static List GetAllAssembly(string dllName)

{

List pluginpath = FindPlugin(dllName);

var list = new List();

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;

}

//查找所有插件的路径

private static List FindPlugin(string dllName)

{

List pluginpath = new List();

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;

}

#endregion

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值