Я пытаюсь научиться использовать виндзор и сталкиваюсь с проблемами.У меня есть существующий DAL, который я использую, и я хотел бы использовать di с этим dal.У меня есть следующий интерфейс (упрощенный ради этого поста) -
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;
}
}
инъекция не работает.Если я шагну по коду, в GetAllData conn всегда будет нулевым.когда я перехожу к установщику, там есть зависимость IConnection / Connection, и она говорит, что все необходимые зависимости могут быть разрешены.
Может кто-нибудь увидеть что-то, что я делаю неправильно?Как я уже сказал, я новичок в ди, поэтому, если я использую его неправильно, пожалуйста, дайте мне знать.
спасибо
РЕДАКТИРОВАТЬ - я не совсем уверенЯ понимаю.Если я изменю свой установщик на следующий, он все равно не будет работать -
container.Register(
Component.For<IConnection>().ImplementedBy<Connection>()
.LifeStyle.Transient
);
container.Register(
Component.For<GetData>()
);
container.Resolve<GetData>();
Схожу ли я с базы по сравнению с тем, что вы сказали, или я иду в правильном направлении?