AP.NET Core获得注入管理器


ASP.NET Core 获得注入的类实例

实现一:

C# 全选
//下面的代码就是执行这个ViewResult,并把结果的html内容放到一个StringBuiler对象中
var services = context.HttpContext.RequestServices;
var viewEngine = services.GetService(typeof(ViewEngines.ICompositeViewEngine)) as ViewEngines.ICompositeViewEngine;
C# 全选
/// <summary>
/// 获得视图响应的html
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
bool GetViewHtml(ActionExecutedContext context, out string html)
{
	//获取结果
	IActionResult actionResult = context.Result;
	//判断结果是否是一个ViewResult
	if (actionResult is ViewResult)
	{
		ViewResult viewResult = actionResult as ViewResult;
		//下面的代码就是执行这个ViewResult,并把结果的html内容放到一个StringBuiler对象中
		var services = context.HttpContext.RequestServices;
		var viewEngine = services.GetService(typeof(ViewEngines.ICompositeViewEngine)) as ViewEngines.ICompositeViewEngine;
		ViewEngines.ViewEngineResult result = viewEngine.FindView(context, viewResult.ViewName, true);

		//var executor = services.GetRequiredService<ViewResultExecutor>();
		var option = services.GetRequiredService<IOptions<MvcViewOptions>>();
		//var result = executor.FindView(context, viewResult);
		result.EnsureSuccessful(originalLocations: null);
		var view = result.View;
		StringBuilder builder = new StringBuilder();
		using (var writer = new StringWriter(builder))
		{
			var viewContext = new ViewContext(
				context,
				view,
				viewResult.ViewData,
				viewResult.TempData,
				writer,
				option.Value.HtmlHelperOptions);
			view.RenderAsync(viewContext).GetAwaiter().GetResult();
			//这句一定要调用,否则内容就会是空的
			writer.Flush();
		}
		html = builder.ToString();
		return true;
	}
	html = "";
	return false;
}

实现二:

C# 全选
public class PageHtmlGenerateService : IDisposable
{
	HttpContext HttpContext;
	IServiceProvider ServiceProvider;
	IRazorViewEngine razorViewEngine;
	ITempDataProvider tempDataProvider;

	IActionDescriptorCollectionProvider m_actionDescriptorCollectionProvider;

	public PageHtmlGenerateService(HttpContext httpContext)
	{
		ServiceProvider = httpContext.RequestServices;
		HttpContext = new DefaultHttpContext { RequestServices = ServiceProvider };

		razorViewEngine = ServiceProvider.GetService(typeof(IRazorViewEngine)) as IRazorViewEngine;
		tempDataProvider = ServiceProvider.GetService(typeof(ITempDataProvider)) as ITempDataProvider;

		m_actionDescriptorCollectionProvider = ServiceProvider.GetService(typeof(IActionDescriptorCollectionProvider)) as IActionDescriptorCollectionProvider;
	}
}

实现三:

C# 全选
/// <summary>
/// 操作者
/// </summary>
public class Operator : IOperator, IScopedDependency
{
	readonly IServiceProvider _serviceProvider;
	public Operator(IServiceProvider serviceProvider)
	{
		_serviceProvider = serviceProvider;
	}

	public void WriteUserLog(UserLogType userLogType, string msg)
	{
		using (var scop = _serviceProvider.CreateScope())
		{
			var db = scop.ServiceProvider.GetService<IDbAccessor>();
			await db.InsertAsync(log);
		}
	}
}

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:C#使用默认浏览器打开URL
下一篇:隐藏input文本框为数字number类型时的上下箭头
评论列表

发表评论

评论内容
昵称:
关联文章

AP.NET Core获得注入管理
.NET Core 深入理解依赖注入 services.AddTransient,services.AddScoped,services.AddSingleton
.Net Core依赖注入
.NET Core Winform 打开窗体设计报错
C# ASP.NET Core开发学生信息管理系统(一)
.NET获得IP地址
.net core winform窗体继承后设计异常,看不到控件,并且页无法添加控件
C# ASP.NET Core开发学生信息管理系统(二)
C# ASP.NET Core开发学生信息管理系统(三)
(五)React Ant Design Pro + .Net5 WebApi:后端环境搭建-Autofac注入+ 泛型仓储
win11使用小技巧之便捷调出你的任务管理
.NET Core ResponseCache 浏览器缓存
ASP.NET Core官网教程,资料查找
组策略:网络安全:LAN 管理身份验证级别 改为 没有定义
.NET 获得当前连接URL,Origin信息
ASP.NET Core开发者学习路线图
.NET Core 自定义中间件 Middleware
C# 利用Autofac批量接口注入依赖【学习记录】
C# 静态类获得 机密配置
ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码