Таким образом, в настоящее время у меня есть мастер-класс DAO ITrackingToolDAO, который имеет все контракты на обслуживание для каждого из моих бизнес-объектов.
public partial interface ITrackingToolDAO {
void Open(string connectionString);
void Close();
IBusinessFunctionDAO BusinessFunction { get; }
IBusinessUnitDAO BusinessUnit { get; }
IProgramBudgetDAO ProgramBudget { get; }
IProjectDAO Project { get; }
...
}
Мой сервисный контракт выглядит так
[ServiceContract(Namespace="http://bmgops.qintra.com/Tracking/v1/BusinessFunction")]
public partial interface IBusinessFunctionDAO {
[OperationContract]
BusinessFunction GetBusinessFunction(Int32 businessFunctionId);
[OperationContract]
IEnumerable<BusinessFunction> Find(string filter);
[OperationContract]
SaveEventArgs<BusinessFunction>Save(BusinessFunction businessFunction);
}
Iв настоящее время есть 2 конкретные реализации моего интерфейса ITrackingToolDAO.Первый - TrackingToolSqlDAO , который создает конкретный SQL DAO для каждой сущности.ie) BusinessFunctionSqlDAO , ProjectSqlDAO и т. д.
Второй - TrackingToolWCFDao , который создает прокси WCF с использованием ChannelFactory чтобы создать реализацию для всех моих членов DAO.
Теперь я хочу начать использовать средство Windsor WCF вместо CreateChannel.Каков наилучший способ сделать это?
Я думал о создании фиктивной реализации ITrackingToolDAO, которая бы принимала параметр IKernel в конструкторе.
public class DummyDAO: ITrackingToolDAO {
public DummyDAO(IKernel kernel) {
_ProjectDAO = kernel.Resolve<IProject>();
....
}
}
Таким образом, я мог бы использоватьWCF Facility для создания всех моих каналов.Мне просто не нравится, потому что он использует контейнер как сервисный локатор, который является запахом кода.В идеале мне также хотелось бы, чтобы я мог зарегистрировать свой DAO SQL и новый DAO WCF в контейнере, чтобы я мог создать любой из них, просто ссылаясь на них по имени.
Есть мысли?