我想學習使用windsor迪和我遇到問題。我有一個現有的DAL,我正在使用,我想用這個dal使用di。我有以下接口(簡化了這個帖子的緣故) -使用城堡windsor迪的問題
public interface IConnection
{
void OpenConnection(string ConnectionStringName);
void CloseConnection();
DbDataReader ExecuteReader(string query);
}
和實現 -
public class Connection : IConnection
{
private DBManager manager = new DBManager();
public void OpenConnection(string ConnectionStringName)
{
manager.OpenConnection("connectionstringname");
}
public void CloseConnection()
{
manager.CloseConnection();
}
public DbDataReader ExecuteReader(string query)
{
return manager.ExecuteReader(query, CommandType.Text);
}
}
這裏是我的溫莎安裝程序 -
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<IConnection>().ImplementedBy<Connection>()
.LifeStyle.Transient
);
}
和這裏是哪裏我正在做注射 -
public class GetData
{
private IConnection conn;
public GetData()
{
}
public GetData(IConnection conn)
{
this.conn = conn;
}
public List<Entity> GetAllData()
{
List<Entity> data= new List<Entity>();
//IConnection conn = new Connection();
conn.OpenConnection("connectionstringname");
try
{
var r = conn.ExecuteReader("select ... from ...");
//code to convert reader to data list
r.Dispose();
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.CloseConnection();
}
return data;
}
}
注射不起作用。如果我單步執行代碼,conn在GetAllData中始終爲空。 當我在安裝程序中逐步完成時,IConnection/Connection依賴關係在那裏,它表示可以解決所有必需的依賴關係。
任何人都可以看到我做錯了什麼嗎?正如我所說,我是di新手,所以如果我錯誤地使用它,請告訴我。
感謝
編輯 - 我不能完全肯定我明白了。如果我改變我的安裝程序下面,它仍然不能正常工作 -
container.Register(
Component.For<IConnection>().ImplementedBy<Connection>()
.LifeStyle.Transient
);
container.Register(
Component.For<GetData>()
);
container.Resolve<GetData>();
我是大錯特錯比你說的,還是我在正確的方向前進嗎?
你註冊了'GetData'嗎? – 2011-05-20 13:16:30
我在哪裏註冊GetData? – czuroski 2011-05-20 13:22:03
您需要在容器中註冊'GetData',然後從容器中解析它。如果你只是做'新的GetData()'容器不能注入任何東西。 – 2011-05-20 13:50:25