0

我在MVC项目中使用Castle Windsor作为ioc。如何在分层架构中安装与城堡windsor的依赖关系

我的架构基本上是网络 - >服务 - >数据

该控制器具有服务的依赖。 服务将数据源作为数据层中的依赖项。

我的Web层没有对数据层的引用。我的问题是,我试图注册我的服务的依赖项的存储库。如果我在我的服务层有一个单独的容器来注册存储库,我应该如何引导它?

或者我可能会以错误的方式解决这个问题。

+0

相关:http://stackoverflow.com/questions/2096978/what-is-the-correct-layer-to-configure-your-ioc-container-when-using-a-service-la –

+0

可能的重复[设计 - 在使用Windsor时对象应该在哪里注册](http://stackoverflow.com/questions/1410719/design-where-should-objects-be-registered-when-using-windsor) –

回答

0

这个怎么样。缺点是你需要硬编码你的存储库DLL的名称,但你总是可以将它移动到web.config等,这将稍微清洁。

IWindsorContainer container = new WindsorContainer(); 

// Register repositories 
_container.Register(
     AllTypes.Pick() 
       .FromAssemblyNamed("MyDataLayerAssembly") 
       .WithService 
       .DefaultInterface()); 

// Register services 
_container.Register(
     AllTypes.Pick() 
       .FromAssemblyNamed(typeof(ISomeService).Assembly.GetName().Name) 
       .WithService 
       .DefaultInterface()); 

ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container)); 

您可能只需要调整恰恰发生了什么传递到Register()方法,以满足您的需求。然而。

0

如果您已将数据层功能类(AKA存储库)的联系人置于域层中,则您的Web层将不必引用数据层。然后,您可以轻松地依靠在Web层中初始化的单个容器。

This Question包含进一步的细节。

请参阅mvc extensions了解实现此目的的一些高级方法。

+0

因此,让我说我把与所有实体在域图层中与我的存储库进行接口。这仍然不允许我注册要使用的IRepository的实现。 – Justin

+0

回答这个问题可以在下面找到 - 参考s1mm0t做了什么。 – Illuminati