我有一个 WCF 服务,该服务调用调用存储库的业务组件,我已经使用它的 WCF 工具使用 CaSTLe Windsor 端到端地工作。
WCF 工具注册和其余组件注册发生在 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>() ); } }
一切都很好,但现在我需要在我的组件之一中引用此容器,以便我可以像这样解析其他组件。
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 中隐藏这个容器以便它可用并且任何组件都可以简单地从缓存中获取它并解决他们想要的任何界面。
请原谅我的无知,因为我是 WCF 和 CaSTLe Windsor 的新手,并且整个架构在一个陡峭的截止日期前被推到了我的喉咙里:-(
最佳答案
这样做怎么样? http://weblogs.asp.net/cibrax/archive/2007/12/13/wcf-dependency-injection-behavior.aspx
方法是关于实现一个Iinstanceprovider
http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.iinstanceprovider.aspx
关于c# - 使用 CaSTLe Windsor 的 WCF 依赖注入(inject) - 请帮忙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3920784/