autofac 注入中i遇到的泛型传参问题
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遇到的泛型传参问题的更多相关文章
- vue-cli项目中使用全局过滤器及传参(日期格式化)
// 过滤日期格式,传入时间戳,根据参数返回不同格式 const formatTimer = function(val, hours) { if (val) { ); var y = dateTime ...
- linux中模块的构建,传参,和printk函数的简单使用
静态编译,动态加载应用想访问内核需要通过系统调用 驱动:1.模块(打包,加入内核)2.内核机制3.操作硬件 在Kconfig里面配置menuconfig的时候,不同的类型会在图形化界面的终端显示不用的 ...
- (二)shell中case语句、程序传参、while
2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...
- 从字节码看java中 this 的隐式传参
从字节码看java中 this 隐式传参具体体现(和python中的self如出一辙,但是比python中藏得更深),也发现了 static 与 非 static 方法的区别所在! static与非s ...
- MVC中学到的小知识(MVC中的跳转,传参)
1.mvc中视图中的href="XXX",这个XXX是控制器地址,不是另一个视图.(这里的href语句只能转向控制器,不能直接转向视图),如果要实现转向视图,可以先转到控制器,然后 ...
- c++11中关于`std::thread`线程传参的思考
关于std::thread线程传参的思考 最重要要记住的一点是:参数要拷贝到线程独立内存中,不管是普通类型.还是引用类型. 对于传递参数是引用类型,需要注意: 1.当指向动态变量的指针(char *) ...
- js中关于带数字类型参数传参丢失首位数字0问题
最近在项目中遇到一个问题,js中传带有数字的参数时,如果参数开头有数字0,会把0给去掉. 例如: 方法abc(0123456,789); 方法abc中获取的参数0123456就会变为123456. 原 ...
- Mybatis中使用 #{} 和 ${} 向sql传参时的区别
今天在工作时,使用MyBatis中向sql传递两个参数时,一直显示SQL语法错误,仔细检查,才发现传入的参数被加上了引号,导致传入的参数(要传入的参数是表名)附近出现语法错误. 错误写法: } a } ...
- mysql中ibatis的limit动态传参
param.put("pageNo",pageNo); param.put("pageSize",pageSize); sqlMap中的用法 limit $ ...
随机推荐
- 如何设计一门语言(八)——异步编程和CPS变换
关于这个话题,其实在(六)里面已经讨论了一半了.学过Haskell的都知道,这个世界上很多东西都可以用monad和comonad来把一些复杂的代码给抽象成简单的.一看就懂的形式.他们的区别,就像用js ...
- [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes
[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes 本篇分享一下第5个已完工的视频,即<beginner Graphics – ...
- 虚拟化平台cloudstack(4)——几个异常
cloudstack主机添加不成功 CloudStack正常启动,添加区域.提供点和群集都正常,但是添加主机时提示添加不成功. 先添加主机: 然后出现提示: 在网上找了一圈,基本上没什么回复,没办法, ...
- 为什么占位符可以防止sql注入?
先看下面用占位符来查询的一句话 String sql = "select * from administrator where adminname=?"; psm = con.pr ...
- EF架构~linq to entity的随机排序问题
回到目录 对于从linq to sql迁移过来的开发者,对随机排序不会感到陌生,直接为datacontext添加一个方法再配合反射就可以实现随机排序了,代码如下: /// <summary> ...
- 04- Shell脚本学习--条件控制和循环语句
条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expre ...
- 《Effective Java》—— 创建与销毁对象
本篇主要总结的是<Effecticve Java>中关于创建和销毁对象的内容. 比如: 何时以及如何创建对象 何时以及如何避免创建对象 如何确保及时销毁 如何管理对象销毁前的清理动作 考虑 ...
- iOS-数据持久化-属性列表
属性列表 属性列表文件是一种XML文件,Foundation框架中的数组和字典等都可以于属性列表文件相互转换. NSArray类常用读写属性列表文件的方法: +arrayWithContentsOfF ...
- ASP.NET MVC 4 Optimization的JS/CSS文件动态合并及压缩
JS/CSS文件的打包合并(Bundling)及压缩(Minification)是指将多个JS或CSS文件打包合并成一个文件,并在网站发布之后进行压缩,从而减少HTTP请求次数,提高网络加载速度和页面 ...
- JS之模板技术(aui / artTemplate)
artTemplate是个好东西啊,一个开源的js前端模板引擎,使用简单,渲染效率特别的高. 我经常使用这个技术来在前端动态生成新闻列表,排行榜,历史记录等需要在前端列表显示的信息. 下面是artTe ...