0

我是使用城堡温莎的新手。我已经在我的 MVC4 应用程序中设置并正常运行。为简洁起见,我的解决方案的受影响布局是:

实体.dll -ICompanyRepository

DAL.dll - CompanyICompanyRepository

基本上我有一堆像上面那样设置的类和接口,所以如果需要,我可以用另一个存储库切换 DAL。我目前已经使用以下方法向 Castle Windsor 注册了类和接口:

container.Register(Component.For<Entities.ICompanyRepository>().ImplementedBy<DAL.Company>().LifestyleTransient());

我的接口和实现它的类在不同的项目中,因此在我的项目中是 dll。我想做但无法弄清楚的是使用一个像上面这样的毯子配置行:

container.Register(AllTypes.FromAssemblyNamed("Entities"));

我尝试了许多不同的组合,但我无法让它发挥作用。有任何想法吗?如果这是更好的选择,我愿意从配置文件加载。

4

1 回答 1

1

我假设您所有的存储库都在实现一个通用接口,例如 IRepository,如果不是,您应该这样做,而不仅仅是为了 IoC 目的......

您可以使用以下注册来注册基于通用接口的所有组件。安装程序应该位于入口点项目中,因此它应该能够看到任何其他项目/dll。

container.Register(Classes
.FromAssemblyNamed("DAL")//assembly containing concrete types
.BasedOn(typeof(IRepository<>))
.WithService.DefaultInterfaces()//concrete will be associated(windosr configuration) with closest interface
.Configure(c => c.YourPolicystrategy()));
于 2013-01-15T08:21:28.290 回答