autofac的小知识点
autofac 注入中i遇到的泛型传参问题
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
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; } }} |
之前的代码

1 using Autofac;
2 using IService;
3 using System;
4 using System.Collections.Generic;
5 using System.Linq;
6 using System.Reflection;
7 using System.Text;
8 using System.Threading.Tasks;
9 using TT.Service.Interface;
10 using TT.Service.Realize;
11
12 namespace InjectionServer
13 {
14 public class Dependency
15 {
16 static Dependency()
17 {
18 if (Builder == null)
19 {
20 Builder = new ContainerBuilder();
21 Register();
22 InstanceContainer = Builder.Build();
23 }
24 }
25
26 #region 容器管理
27 /// <summary>
28 /// 取出对象管理
29 /// </summary>
30 internal static IContainer InstanceContainer { get; set; }
31
32 /// <summary>
33 /// 注册对象管理
34 /// </summary>
35 internal static ContainerBuilder Builder { get; set; }
36
37 /// <summary>
38 /// 获取指定接口的实例
39 /// </summary>
40 /// <typeparam name="T"></typeparam>
41 /// <returns></returns>
42 internal static T GetInstance<T>()
43 where T : class
44 {
45 var instance = InstanceContainer.Resolve<T>();
46 return instance;
47 }
48
49 /// <summary>
50 /// 注册并且设置为在一个生命周期域中,每一个依赖或调用创建一个单一的共享的实例,且每一个不同的生命周期域,实例是唯一的,不共享的。
51 /// </summary>
52 /// <typeparam name="T"></typeparam>
53 /// <typeparam name="K"></typeparam>
54 /// <param name="t"></param>
55 /// <param name="k"></param>
56 internal static void Register<T, K>()
57 where T : class
58 where K : class
59 {
60 Builder.RegisterType<T>().As<K>().PropertiesAutowired().InstancePerDependency();
61 }
62 #endregion
63
64 #region 容器注册
65 internal static void Register()
66 {
67
68
69 Register<UserService, IUserService>();
70 //Register<UserService, IUserService>();
71 //Register<UserService, IUserService>();
72
73 }
74 #endregion
75
76 public IUsers UsersExample { get { return GetInstance<IUsersService>(); } }
77
78
79 }
80 }

autofac的小知识点的更多相关文章
- 刚接触Linux,菜鸟必备的小知识点(一)
身为一个将要大四的学生,而且还是学计算机的没有接触过linux简直是羞愧难当.这个假期做了一个软件测试员,必须要熟悉linux的操作,所以对于我这个菜鸟我也就说几点比较重要的小知识点吧. 第一.cd指 ...
- Java学习过程中的总结的小知识点(长期更新)
Java学习过程中的总结的小知识点 (主要是自己不会的知识和容易搞错的东西) 计算某个程序运行的时间 long stime=System.currentTimeMillis(); copy3(file ...
- 【转】HTML5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<h ...
- AngularJS的小知识点
小知识点:$scope和$rootScope (1)每次使用ngController指令,都会调用控制器的创建函数,创建出一个控制器对象. (2)每次创建一个控制器对象,AngularJS都会创建一个 ...
- js中关于value的一个小知识点(value既是属性也是变量)
今天在学习input的value值时,发现这么一个小知识点,以前理解不太透彻. [1]以下这种情况是常见情况,会弹出“测试内容” <input type="button" v ...
- html5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于< ...
- [BS] 小知识点总结-05
[BS] 小知识点总结-05 1. 不论UIWindow的rootViewController是navC.tabBarC还是VC,也不管modalVC和rootVC中间隔着多少个VC,但是modal出 ...
- 一个关于echo的小知识点
一个关于echo的小知识点 echo一个布尔值时,如果是true,输出1,而如果是false,将什么都不输出! 网上搜的一个解释: 对于数字类型来说,false 确实 是 0, 而对strin ...
- easyui中的combobox小知识点~~
一直使用的easyui中,一些不为人知的小知识点,与君共勉: 1.combobox设置高度:使用panelHeight属性: 2.combobox本身自带“自动补全”功能,但是在浏览器中是有限制的,在 ...
随机推荐
- 用Grunt进行CSS文件压缩
假设你的项目的CSS文件全部放在项目目录下名为css的文件夹中,现在将它压缩合并成一个名为main-min.css的文件,放在css-min文件夹下. (1)首先保证机器安装了node.js. (2) ...
- Lazarus Coolbar and AnchroDocking
在lazarus1.6里加载了AnchroDocking后,Coolbar突然不见了,找了好久没找到,原来在这里! 在AnchroDocking中可能是为了界面的最大化,默认是开始Toolbar 而关 ...
- C# 执行sql语句批量更新
int x = db.Database.ExecuteSqlCommand(string.Format("update T_Pension SET UnitType = '{0}' WHER ...
- 本地运行项目成功 ,但在服务器运行程序就会报Failed to establish a new connection: [Errno -2] Name or service not known
equests.exceptions.ConnectionError: HTTPSConnectionPool(host=): Max retries exceeded with url: /appa ...
- Typescript编译设置
TypeScript MSBuild编译选项,用记事本打开工程文件,进行修改,如<TypeScriptGeneratesDeclarations>true</TypeScriptGe ...
- centos安装指定mysql
mysql下载地址:http://repo.mysql.com/ nginx下载地址 我下载是这个 http://nginx.org/packages/centos/7/noarch/RPMS/ngi ...
- Python random模块&string模块 day3
一.random模块的使用: Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. 1.常用函数: (1)random.random() 用于生成一个0到1 ...
- Luogu P2866 [USACO06NOV]糟糕的一天Bad Hair Day
P2866 [USACO06NOV]糟糕的一天Bad Hair Day 题目描述 Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a ...
- 爬虫文件存储:txt文档,json文件,csv文件
5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1.1 TXT文本存储 将数 ...
- Linux之iptables(二、基本认识和组成)
iptables的基本认识 Netfilter组件 内核空间,集成在linux内核中 扩展各种网络服务的结构化底层框架 内核中选取五个位置放了五个hook(勾子) function(INPUT.OUT ...