zoukankan      html  css  js  c++  java
  • 注入实例获取

    /// <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 interface IEngine
    {
    T Resolve<T>();
    }

    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;
    }
    }
    }

    在startup中添加

    ServiceProvider serviceProvider = services.BuildServiceProvider();


    EngineContext.initialize(new GeneralEngine(serviceProvider));

    在cntrol中引用

    private ISaleListService saleService = EngineContext.Current.Resolve<ISaleListService>(); 

     

     

    3.3 View中使用

    在View中需要用@inject 再声明一下,起一个别名。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @using MilkStone.Services;
    @model MilkStone.Models.AccountViewModel.LoginViewModel
    @inject ILoginService<ApplicationUser>  loginService
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head></head>
    <body>
      @loginService.GetUserName()
    </body>
    </html>

      

    3.4 通过 HttpContext来获取实例

    HttpContext下有一个RequestedService同样可以用来获取实例对象,不过这种方法一般不推荐。同时要注意GetService<>这是个范型方法,默认如果没有添加Microsoft.Extension.DependencyInjection的using,是不用调用这个方法的。
    1
    HttpContext.RequestServices.GetService<ILoginService<ApplicationUser>>();
  • 相关阅读:
    如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?
    如何评测软件工程知识技能水平
    深入理解TCP协议及其源代码
    Socket与系统调用深度分析
    创新产品的需求分析:未来的图书会是什么样子?
    构建调试Linux内核网络代码的环境MenuOS系统
    Java实现简单网络聊天程序
    适配器模式的探究
    Linux下ss命令的研究
    业务领域建模Domain Modeling
  • 原文地址:https://www.cnblogs.com/jyzjh/p/13198595.html
Copyright © 2011-2022 走看看