using Autofac;
using IService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using TT.Service.Interface;
using TT.Service.Realize; namespace InjectionServer
{
public class Dependency
{ public static Assembly Assemblys { set; get; } = Assembly.Load("TT.Service"); static Dependency()
{
if (Builder == null)
{
Builder = new ContainerBuilder();//初始化容器
Builder.RegisterAssemblyTypes(Assemblys)
.Where(o => o != typeof(IRepository<>))
.AsImplementedInterfaces().PropertiesAutowired().InstancePerDependency();
InstanceContainer = Builder.Build();
}
} public Dependency()
{
var type = this.GetType();
foreach (var item in type.GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
try
{
string key = "TT.Service.Interface." + $"I{item.Name.Replace("Example", "")}";
Type t = Assemblys.GetType(key);
var method = type.GetMethod("GetInstance", BindingFlags.Static | BindingFlags.NonPublic)
.MakeGenericMethod(t);
item.SetValue(this, method.Invoke(null, null));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
} /// <summary>
/// 取出对象管理
/// </summary>
internal static IContainer InstanceContainer { get; set; } /// <summary>
/// 注册对象管理
/// </summary>
internal static ContainerBuilder Builder { get; set; } internal static T GetInstance<T>()
where T : class
{
var instance = InstanceContainer.Resolve<T>();
return instance;
} internal static void Register<T, K>()
where T : class
where K : class
{
Builder.RegisterType<T>().As<K>().PropertiesAutowired().InstancePerDependency();
} public IUsers UsersExample { set; get; } public ITest TestExample { set; get; }
}
}

  

之前的代码

 using Autofac;
using IService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using TT.Service.Interface;
using TT.Service.Realize; namespace InjectionServer
{
public class Dependency
{
static Dependency()
{
if (Builder == null)
{
Builder = new ContainerBuilder();
Register();
InstanceContainer = Builder.Build();
}
} #region 容器管理
/// <summary>
/// 取出对象管理
/// </summary>
internal static IContainer InstanceContainer { get; set; } /// <summary>
/// 注册对象管理
/// </summary>
internal static ContainerBuilder Builder { get; set; } /// <summary>
/// 获取指定接口的实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
internal static T GetInstance<T>()
where T : class
{
var instance = InstanceContainer.Resolve<T>();
return instance;
} /// <summary>
/// 注册并且设置为在一个生命周期域中,每一个依赖或调用创建一个单一的共享的实例,且每一个不同的生命周期域,实例是唯一的,不共享的。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="K"></typeparam>
/// <param name="t"></param>
/// <param name="k"></param>
internal static void Register<T, K>()
where T : class
where K : class
{
Builder.RegisterType<T>().As<K>().PropertiesAutowired().InstancePerDependency();
}
#endregion #region 容器注册
internal static void Register()
{ Register<UserService, IUserService>();
//Register<UserService, IUserService>();
//Register<UserService, IUserService>(); }
#endregion public IUsers UsersExample { get { return GetInstance<IUsersService>(); } } }
}

autofac 注入中i遇到的泛型传参问题的更多相关文章

  1. vue-cli项目中使用全局过滤器及传参(日期格式化)

    // 过滤日期格式,传入时间戳,根据参数返回不同格式 const formatTimer = function(val, hours) { if (val) { ); var y = dateTime ...

  2. linux中模块的构建,传参,和printk函数的简单使用

    静态编译,动态加载应用想访问内核需要通过系统调用 驱动:1.模块(打包,加入内核)2.内核机制3.操作硬件 在Kconfig里面配置menuconfig的时候,不同的类型会在图形化界面的终端显示不用的 ...

  3. (二)shell中case语句、程序传参、while

    2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...

  4. 从字节码看java中 this 的隐式传参

    从字节码看java中 this 隐式传参具体体现(和python中的self如出一辙,但是比python中藏得更深),也发现了 static 与 非 static 方法的区别所在! static与非s ...

  5. MVC中学到的小知识(MVC中的跳转,传参)

    1.mvc中视图中的href="XXX",这个XXX是控制器地址,不是另一个视图.(这里的href语句只能转向控制器,不能直接转向视图),如果要实现转向视图,可以先转到控制器,然后 ...

  6. c++11中关于`std::thread`线程传参的思考

    关于std::thread线程传参的思考 最重要要记住的一点是:参数要拷贝到线程独立内存中,不管是普通类型.还是引用类型. 对于传递参数是引用类型,需要注意: 1.当指向动态变量的指针(char *) ...

  7. js中关于带数字类型参数传参丢失首位数字0问题

    最近在项目中遇到一个问题,js中传带有数字的参数时,如果参数开头有数字0,会把0给去掉. 例如: 方法abc(0123456,789); 方法abc中获取的参数0123456就会变为123456. 原 ...

  8. Mybatis中使用 #{} 和 ${} 向sql传参时的区别

    今天在工作时,使用MyBatis中向sql传递两个参数时,一直显示SQL语法错误,仔细检查,才发现传入的参数被加上了引号,导致传入的参数(要传入的参数是表名)附近出现语法错误. 错误写法: } a } ...

  9. mysql中ibatis的limit动态传参

    param.put("pageNo",pageNo);   param.put("pageSize",pageSize); sqlMap中的用法 limit $ ...

随机推荐

  1. SQL关联查询总结

    employee表: department表: 笛卡儿积: 等值连接: 内连接(和等值连接效果是相同的): 外连接(外连接不仅返回满足条件的记录,还将返回不满足条件的记录)以下是左外连接,右外连接.全 ...

  2. 分割超大Redis数据库例子

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/124.html?1455853509 薄荷 App 上的伙伴功能大量使用了 ...

  3. 爱上MVC3~在控制器或Action上动态设定模板页(Layout)

    回到目录 很多境况下,我们需要设置自己模块的layout,即它的布局页面,在MVC2中叫它模板页面,你可以在return view方法时设置它,当然,这不是一种好方法,因为我不想每个action都去设 ...

  4. Java中static的理解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  5. PHP实现RESTful风格的API实例(一)

    最近看了一些关于RESTful的资料,自己动手也写了一个RESTful实例,以下是源码 目录详情: restful/ Request.php 数据操作类 Response.php 输出类 index. ...

  6. 让 “微软雅黑” 在IE6下完美显示

    微软雅黑可以说是网页中最常见的字体了,但是往往在IE8+的浏览器上调试得很好,到了IE6则会变成默认的"宋体". 因为宋体字体宽度通常比雅黑的要宽,有时候会把页面都布局挤乱. 为了 ...

  7. 最新hadoop+hbase+spark+zookeeper环境安装(vmmare下)

    说明:我这里安装的版本是hadoop2.7.3,hbase1.2.4,spark2.0.2,zookeeper3.4.9 (安装包:链接:http://pan.baidu.com/s/1c25hI4g ...

  8. 180分钟的python学习之旅

    最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大.很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时 ...

  9. Android入门(八)广播

    原文链接:http://www.orlion.ga/572/ 一.广播机制 Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广 播可能是 ...

  10. java线程四种状态

    一个线程可以有四种状态: 1.新(new), 即线程刚刚创建,而并未执行 2.可运行(runnable),意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行.因此,线程可 ...