注入实例获取

/// <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>>();

 

上一篇:说一下的dubbo的工作原理?注册中心挂了可以继续通信吗?


下一篇:[20191113]oracle共享连接模式端口2.txt