2000C币高额悬赏!在框架分层的情况下成功使用AutoFac控制反转!

跪求解决方案!
我的框架是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
}
}

7个回答

1.下载DataBase.cs
2.下载Utils.cs
3. 配置数据库连接字符



4. 自己参悟一下
public static List ToList(DataTable dt)

{
List list = new List();
foreach (DataRow dr in dt.Rows)
{
dynamic entity = new ExpandoObject();
var dic = (Dictionary)entity;
foreach (DataColumn dc in dt.Columns)
{
dic.Add(name,value);
}
list.Add(entity);
}
return list;
}

出来的格式是把每条数据变成实体格式数据,实体类省了,生成实体类的代码生成工具都不用了
当然还有更牛叉的。
liaoyu45
大胡子毛绒老头 我们的代码几乎一模一样……直接用IDictionary<string, object>声明呗?加上个泛型好么?good good
2 年多之前 回复

写的不够明确啊,如何到不了数据服务层、及业务处理层的实例

cuthkid
dean615 回复明月应往浮云去: 请问怎么解决的
11 个月之前 回复
pm1423258028
明月应往浮云去 回复weixin_42375965: 谢谢,问题已解决
大约 2 年之前 回复
weixin_42375965
[微笑]偉 写的不够明确啊,如何到不了数据服务层、及业务处理层的实例
大约 2 年之前 回复
pm1423258028
明月应往浮云去 回复爱看夜的猫: 好的,pm1423258028@163.com
3 年多之前 回复
u013929331
爱看夜的猫 回复爱看夜的猫: C币无所谓
3 年多之前 回复
u013929331
爱看夜的猫 回复pm1423258028: 我有类似项目,使用 Assembly做预加载,邮箱留一下
3 年多之前 回复
pm1423258028
明月应往浮云去 Assembly[] asmBusiness = GetAllAssembly("MicroCloud.Business.dll").ToArray(); asmBusiness 的个数为0
3 年多之前 回复

的确不够明确。给我2000C 我给你解决

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复王九思易: 两个人一个想用C币骗答案,一个想用答案骗C币,哈哈,结果是C币也死在这里了,问题也没人解决。
2 年多之前 回复
pm1423258028
明月应往浮云去 只要能解决,这都不是事儿
3 年多之前 回复

扔了吧,给你个新框架,什么springmvc之类,其实都是坑人的,一堆垃圾代码,根本没自己写的好用。

要按照实际项目选择,不能死搬硬套

检查一下BLL,DAL接口,检查DLL路径命名空间,其实这东西还不如自己写来得实际

统一回复:谢谢大家的热情帮忙,这个问题已经解决

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问