У меня возникли проблемы с реализацией IOC с использованием windsor. У меня есть несколько различных реализаций класса доступа к данным, и я хочу использовать windsor, чтобы иметь возможность указать, какой класс доступа к данным использовать при использовании бизнес-объекта. Смотрите код ниже
public interface IPersistable
{
bool Save();
bool Delete();
}
public class Address
{
public Address()
{
}
public Address(IPersistable Factory)
{
this.DataAccess = Factory;
}
private IPersistable _DataAccess;
public IPersistable DataAccess
{
get { return _DataAccess; }
set { _DataAccess = value; }
}
}
public class AddressFactoryUsingSQL : IPersistable
{
public bool Save()
{
throw new NotImplementedException();
}
public bool Delete()
{
throw new NotImplementedException();
}
}
public class AddressFactoryUsingWebService : IPersistable
{
public bool Save()
{
throw new NotImplementedException();
}
public bool Delete()
{
throw new NotImplementedException();
}
}
public class AddressFactoryUsingRepository : IPersistable
{
public bool Save()
{
throw new NotImplementedException();
}
public bool Delete()
{
throw new NotImplementedException();
}
}
Добавить, когда класс потребляется, используя следующее:
Address addr = new Address(new AddressFactoryUsingSQL);
Я хочу использовать Виндзор, чтобы написать что-то похожее на:
IWindsorContainer _Container= new WindsorContainer();
_Container.Register(Castle.MicroKernel.Registration.Component.For<IPersistable>()); //this would retrieve the IPersistable class i want to use for the Address business object
IPersistable addrF = _Container.Resolve<IPersistable>();
Address addr = new Address(addrF);
как мне этого добиться? Я получаю сообщение об ошибке "
Тип IPersistable является абстрактным.
Таким образом, невозможно реализовать его как реализацию службы IPersistable "
Я хочу иметь возможность изменять метод доступа к данным, не меняя весь мой код. Кроме того, как я могу использовать web.config для этого?
Al