У меня есть служба WCF, которая вызывает бизнес-компонент, который вызывает хранилище, и у меня есть возможность закончить работу с использованием Castle Windsor, используя его WCF Facility.
Регистрация WCF Facility и оставшаяся часть регистрации компонентапроисходит в файле Global.asax, как это.
public class Global : System.Web.HttpApplication
{
public IWindsorContainer SystemContainer;
protected void Application_Start(object sender, EventArgs e)
{
RegisterDependencies();
}
private void RegisterDependencies()
{
SystemContainer = new WindsorContainer();
SystemContainer.AddFacility<WcfFacility>().Register(
Component.For<IBookingRepository>().ImplementedBy<BookingRepository>(),
Component.For<IBookingBll>().ImplementedBy<BookingBll>(),
Component.For<IBookingService>().ImplementedBy<BookingService>(),
Component.For<ILogger>().ImplementedBy<Logger>()
);
}
}
Все хорошо, но теперь мне нужно сослаться на этот контейнер в одном из моих компонентов, чтобы я мог разрешить другие компоненты, как это.
</p>
public class BookingBll : IBookingBll
{
private IBookingRepository _repository;
private ILogger _logger;
public BookingBll(IBookingRepository repository)
{
_repository = repository;
_logger = SystemContainer.Resolve<ILogger>(); // This will not
//compile as we can't access a Global class property.
}
public void Add(Booking booking)
{
//Some implementation;
_logger.Write();
}
}
Более того, я хочу, чтобы этот контейнер был доступен глобально, и не хочу многократно запускать регистрацию, поэтому я должен изучить шувинг этого контейнера в HttpRuntime.Cache, чтобы он был доступен и любой компонент мог просто получитьэто из Cache и решить, какой интерфейс они хотят.
Прошу прощения за мое невежество, так как я новичок в WCF, а также Castle Windsor, и вся архитектура была заткнута в мое горло с крутым сроком: - (