IAbpSession,ILogger,UserManager,如何在普通的C#类中注入这些对象

时间:2017-08-30 18:59:38

标签: asp.net-core-1.1 aspnetboilerplate

是否可以在普通的C#类中获取以下对象的实例:

IAbpSession,ILogger,UserManager,IConfigurationRoot

我想在自定义类中使用不是从其他基类派生的对象类型。如果不可能,我应该从哪个基类派生我的类,以便将这些对象注入我的类,而不是" MVC控制器"," Web API控制器"和#34;应用服务"?

1 个答案:

答案 0 :(得分:1)

要在普通(自定义)C#类中使用这些接口,必须使用依赖注入。首先,您需要在依赖注入系统中注册自定义类。这很容易;只需从ITransientDependency(或ISingletonDependency)继承您的自定义类,然后注入IAbpSession或注册到依赖注入系统的任何类。让我向您展示一个基本样本;

using Abp.Dependency;
using Abp.Runtime.Session;
using Castle.Core.Logging;
using Microsoft.Extensions.Configuration;
using MyCompanyName.AbpZeroTemplate.Authorization.Users;

public class MyCustomClass : ITransientDependency
{
    private readonly IAbpSession _abpSession;
    private readonly ILogger _logger;
    private readonly UserManager _userManager;
    private readonly IConfigurationRoot _configurationRoot;

    public MyCustomClass(IAbpSession abpSession, 
                         ILogger logger, 
                         UserManager userManager, 
                         IConfigurationRoot configurationRoot)
    {
        _abpSession = abpSession;
        _logger = logger;
        _userManager = userManager;
        _configurationRoot = configurationRoot;
    }

    public async void CreateUser()
    {
        await _userManager.CreateAsync(new User
        {
            Name = "Alper",
            TenantId = _abpSession.TenantId
        }, "1234567");


        var myConnectionString = _configurationRoot.GetConnectionString("Default");
        _logger.Debug("A new user is created using this connection string : " + myConnectionString);
    }
}

我尝试使用你提到的所有接口。