Before using any dependency injection
我用簡單的interface
做出loosely coupled code
像下面 -如何在構造函數或任何條件下使用參數實現autofac依賴注入?
Program.cs的
class Program
{
static void Main(string[] args)
{
Customer obj = new Customer(new OracleData());
obj.Add();
}
}
Customer.cs
public class Customer
{
private Idata iobj;
public Customer(Idata newiobj)
{
iobj = newiobj;
}
public void Add()
{
iobj.AddData();
}
}
OracleData.cs
個public class OracleData : Idata
{
public void AddData()
{
throw new NotImplementedException();
}
}
SQLData.cs
public class SQLData : Idata
{
public void AddData()
{
throw new NotImplementedException();
}
}
Idata.cs
public interface Idata
{
void AddData();
}
現在,我想這使用Autofac
DI庫 - 我不知道它常常將其注入最後一類對象,如何使用構造函數或任何條件設置解析對象?
代碼中使用Autofac DI -
static void Main(string[] args)
{
var builder = new ContainerBuilder();
builder.RegisterType<Customer>();
builder.RegisterType<OracleData>().As<Idata>();
builder.RegisterType<SQLData>().As<Idata>();
var container = builder.Build();
using (var scope = container.BeginLifetimeScope())
{
var app = scope.Resolve<Idata>();
app.AddData();
}
//commented
//Customer obj = new Customer(new OracleData());
//obj.Add();
}
你可以使用[名]( http://docs.autofac.org/en/latest/advanced/keyed-services.html),即'builder.Register().name (「oracleData」);''和'scope.ResolveNamed (「oracleData 「);'。 –
stuartd
哦,我看到了,但我們怎麼能使用它在構造函數或使用任何條件? – Neo
在使用任何依賴注入之前,我使用簡單的接口來創建一個鬆散耦合的代碼,如下面的「public DataHandler([WithKey(」oracleData「)] Idata data){...}' – stuartd