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. 使用Location对象查询字符串参数

    location是BOM中最有用的对象之一: 1.它提供了与当前窗口中加载的文档有关的信息: 2.他还提供了一些导航功能. location对象的属性有: hash, host, hostname, ...

  2. Amazon Dynamo论文学习

    Dynamo是一个key-value数据存储系统,去中心化.高可扩展.高可用,使用一致性哈希来分区和备份数据,使用数据版本化来实现一致性. 核心技术 CAP:一致性.可用性.扩展性 一致性哈希:切分数 ...

  3. 将不确定变为确定~transactionscope何时提升为分布式事务~SQL2005与SQL2008不同

    回到目录 Transactionscope何时被提升为分布式事务,即时要触发msdtc服务,这个问题与数据库版本有关,在前面的文章中,我的MSTDC系列出现了多个版本,有一点没有说清楚,测试的环境不同 ...

  4. struts2学习笔记之五:表单数据收集的几种方式

    方法一:struts2对ModelDriven模式的支持(模型驱动模式) Struts2可以采用类似于Struts1中的ActionForm方式收集数据,这样方式叫ModelDriven模式 Acti ...

  5. CentOS 下运维自动化 Shell 脚本之 expect

    CentOS 下运维自动化 Shell脚本之expect 一.预备知识: 1.在 Terminal 中反斜杠,即 "" 代表转义符,或称逃脱符.("echo -e与pri ...

  6. iis https 客户端证书

    1.自建根证书 makecert -r -pe -n "CN=WebSSLTestRoot" -b 12/22/2013 -e 12/23/2024 -ss root -sr lo ...

  7. (转)rlwrap真是一个好东西

    在Linux下面使用sqlplus很不爽,上下键,退格键都不能用,严重降低生产效率. 某一天终于发现了这个rlwrap这个好东西,特写此文记录. 下载地址如下: http://utopia.knowa ...

  8. [UWP]涨姿势UWP源码——Unit Test

    之前我们讨论了涨姿势UWP的RSS数据源获取,以及作为文件存储到本地,再将数据转化成Model对象.这部分非UI的内容非常适合添加Unit Test.不涉及UI的话,UT写起来简单高效,很是值得投入一 ...

  9. WebStorm 9 自动编译 LESS 产出 CSS 和 source maps

    1.双击桌面Chrome图标,打开Chrome,按键盘“F12”键,打开开发工具界面,点击其右上角的“设置”按钮,勾选“Enable JavaScript source maps”  及“Enable ...

  10. 轻松自动化---selenium-webdriver(python) (六)

    本节知识点: 操作对象: · click 点击对象 · send_keys 在对象上模拟按键输入 · clear 清除对象的内容,如果可以的话 WebElement  另一些常用方法: · text  ...