簡體   English   中英

沒有構造函數的Autofac寄存器類型

[英]Autofac Register Type without constructor

我已經在Autofac注冊了一種類型,但是該接口始終為null 我不知道我的實現是否正確。 在下面的代碼中, _dbFactory始終為null 請指導。

類庫

 public class DatabaseHelper
{
    private IDatabaseFactory _dbFactory;

    public void ExecuteQuery()
    {
        using (var cmd = _dbFactory.CreateCommand())
        {
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "Select *  from Employee";
            cmd.ExecuteNonQuery();
        }
    }
}

我的控制台應用程序

static void Main(string[] args)
    {
        UpdateDependency();

        var dbHelper = new DatabaseHelper();

        dbHelper.ExecuteQuery();

        Console.Read();
    }

    public static void UpdateDependency()
    {
        var builder = new ContainerBuilder();

        builder.Register(c => new SqlFactory("Data Source=TEST;Initial Catalog=test;Integrated Security=True")).As<IDatabaseFactory>();

        var container = builder.Build();

        container.Resolve<IDatabaseFactory>();

        using (var scope = container.BeginLifetimeScope())
        {
            var app = scope.Resolve<IDatabaseFactory>();
        }
    }

像這樣使用構造方法注入:

public class DatabaseHelper
{
    private IDatabaseFactory _dbFactory;

    public DatabaseHelper(IDatabaseFactory factory)
    {
        _dbFactory = factory;
    }

    ....
}

然后要求容器解析DatabaseHelper而不是像這樣手動構建它:

static void Main(string[] args)
{
    var builder = new ContainerBuilder();

    builder.Register(c => new SqlFactory("Data Source=TEST;Initial Catalog=test;Integrated Security=True")).As<IDatabaseFactory>();

    builder.RegisterType<DatabaseHelper>();

    var container = builder.Build();

    using (var scope = container.BeginLifetimeScope())
    {
        var dbHelper = scope.Resolve<DatabaseHelper>();

        dbHelper.ExecuteQuery();

        Console.Read();
    }
}

請注意,您不必解析IDatabaseFactory因為容器會自動檢測到它是DatabaseHelper的依賴項並將自動注入它。 這稱為自動接線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM