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开发框架网发布内容,转载请附上原文出处连接
post 张国生