[英]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.