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>>();
  • 相关阅读:
    Django ORM操作及进阶
    Django ORM字段和字段参数
    Django视图系统
    Django路由系统
    Django模板语言
    Django项目创建及相关配置,在pycharm终端打印SQL语句,在Python脚本中调用Django环境
    SQLALchemy之ORM操作
    SQLALchemy之介绍,基本使用
    SQLAlchemy创建表和删除表
    线程的通信与协作:sleep、wait、notify、yield、join关系与区别
  • 原文地址:https://www.cnblogs.com/jyzjh/p/13198595.html
Copyright © 2011-2022 走看看