.net core从依赖注入容器获取对象
创建引擎方法:该方法用于在不使用构造注入的情况下从依赖注入容器中获取对象
/// <summary>
/// 一个负责创建对象的引擎
/// </summary>
public interface IEngine
{
T Resolve<T>();
}
/// <summary>
/// 引擎实现类
/// </summary>
public class GeneralEngine : IEngine
{
private IServiceProvider _provider;
public GeneralEngine(IServiceProvider provider)
{
this._provider = provider;
}
/// <summary>
/// 构建实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public T Resolve<T>()
{
return _provider.GetService<T>();
}
}
/// <summary>
/// 引擎上下文,在项目初始化过程中实例化一个引擎实例
/// </summary>
public class EngineContext
{
private static IEngine _engine;
[MethodImpl(MethodImplOptions.Synchronized)]
public static IEngine initialize(IEngine engine)
{
if (_engine == null)
{
_engine = engine;
}
return _engine;
}
/// <summary>
/// 当前引擎
/// </summary>
public static IEngine Current
{
get
{
return _engine;
}
}
}
利用上面定义的引擎上下文初始化引擎实例
public void ConfigureServices(IServiceCollection services)
{
//services.Configure<CookiePolicyOptions>(options =>
//{
// // This lambda determines whether user consent for non-essential cookies is needed for a given request.
// options.CheckConsentNeeded = context => true;
// options.MinimumSameSitePolicy = SameSiteMode.None;
//}); services.AddMvc();
services.AddDbContext<GeneralDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnectionString")
)); // services.AddScoped<ICategoryService, CategoryService>();
services.AddAssembly("General.Services");
services.AddScoped(typeof(IRepository<>),typeof(EfRepository<>));
EngineContext.initialize(new GeneralEngine(services.BuildServiceProvider())); services.AddAuthentication();
}
在controller中使用
public class CategoryController : Controller
{
private ICategoryService _categoryService;
//public CategoryController(ICategoryService categoryService)
//{
// this._categoryService = categoryService;
//}
public IActionResult Index()
{
return View();
} public IActionResult AddCate()
{
_categoryService = EngineContext.Current.Resolve<ICategoryService>();
_categoryService.Add(new CategoryEntity
{
IsMenu = false,
Name = "用户管理4",
IsDisabled = true
}); return Content("保存成功");
}
}
.net core从依赖注入容器获取对象的更多相关文章
- Asp.net core自定义依赖注入容器,替换自带容器
依赖注入 在asp.net core程序中,众所周知,依赖注入基本上贯穿了整个项目,以通用的结构来讲解,控制器层(Controller层)依赖业务层(Service层),业务层依赖于仓储层(Repos ...
- 几十行代码实现ASP.NET Core自动依赖注入
在开发.NET Core web服务的时候,我们习惯使用自带的依赖注入容器来进行注入. 于是就会经常进行一个很频繁的的重复动作:定义一个接口->写实现类->注入 有时候会忘了写Add这一步 ...
- Asp.Net Core 进阶(三)—— IServiceCollection依赖注入容器和使用Autofac替换它
Asp.Net Core 提供了默认的依赖注入容器 IServiceCollection,它是一个轻量级的依赖注入容器,所以功能不多,只是提供了基础的一些功能,要实现AOP就有点麻烦,因此在实际工作当 ...
- ASP.NET Core之依赖注入
本文翻译自:http://www.tutorialsteacher.com/core/dependency-injection-in-aspnet-core ASP.NET Core支持依赖注入,依赖 ...
- 【半小时大话.net依赖注入】(下)详解AutoFac+实战Mvc、Api以及.NET Core的依赖注入
系列目录 上|理论基础+实战控制台程序实现AutoFac注入 下|详解AutoFac+实战Mvc.Api以及.NET Core的依赖注入 前言 本来计划是五篇文章的,每章发个半小时随便翻翻就能懂,但是 ...
- 重新整理 .net core 实践篇————依赖注入应用[二]
前言 这里介绍一下.net core的依赖注入框架,其中其代码原理在我的另一个整理<<重新整理 1400篇>>中已经写了,故而专门整理应用这一块. 以下只是个人整理,如有问题, ...
- Yii2.0 依赖注入(DI)和依赖注入容器的原理
依赖注入和依赖注入容器 为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Serv ...
- Unity轻量级依赖注入容器
一.前言 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.在Nuget里安装unity
- yii2之依赖注入与依赖注入容器
一.为什么需要依赖注入 首先我们先不管什么是依赖注入,先来分析一下没有使用依赖注入会有什么样的结果.假设我们有一个gmail邮件服务类GMail,然后有另一个类User,User类需要使用发邮件的功能 ...
随机推荐
- CF643D Bearish Fanpages
题意 英文版题面 Problems Submit Status Standings Custom test .input-output-copier { font-size: 1.2rem; floa ...
- Oracle 11g direct path read 等待事件的理解
在Oracle 11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这样的全表扫描就是物理读了. 在10g中,都是通过gc buffer来读的,所以不存在di ...
- skipper backend 负载均衡配置
skipper 对于后端是支持负载均衡处理的,支持官方文档并没有提供,实际使用中,这个还是比较重要的 同时支持健康检查. 格式 hello_lb_group: Path("/foo" ...
- redmine和jenkins的ldap登录设置
工具: softeera LDAP browser 流程: Authentication modes » test Name * Host * Port * LDAPS Account Passwo ...
- 将 vue 挂在 window 对象上,实现能调用 elementUI 的组件
html 部分: <div id="sample"> </div> js 部分(将js代码放在 body 的 onload事件中: <body onl ...
- 修改ORA-28001 口令已经失效问题
Oracle默认密码的有效时间为180天,当超过180天时,将出现如下错误 解决方法: 使用Oracle SQL Developer登录Oralce, 以as sysdba登录 登录后,执行 sele ...
- c#:$用法
为什么会出现$符号,c#6.0才出现的新特性 var s = string.Fromat("{0}+{1}={2}",12,23,12+23) 用起来必须输入string.From ...
- windows下安装redis以及测试 --转载自http://www.cnblogs.com/lpyan/p/5608333.html
redis加入到Windows 服务 以下方式,需要在redis-2.8.24下执行:http://download.csdn.net/download/feiliua/9425770 ,另外php的 ...
- 利用event为z数据表定期添加和删除分区
我们去年就开始把zabbix数据库改成用TokuDB来支撑,并且启用了表分区(详情见:迁移Zabbix数据库到TokuDB).这样做的好处很明显,较早的历史数据可以通过删除分区快速废弃掉.要知道,za ...
- overflow标签
有时父标签设置了固定的宽高,但子标签把父标签给撑开了,就要在父标签里加一个overflow标签,等于hidden超出的地方隐藏,等于auto超出的地方隐藏,并且多个滚动条 <div style= ...