如何使用Castle Windsor在解决方案中使用多个项目

时间:2015-07-29 16:49:49

标签: c# asp.net-mvc castle-windsor

我有一个有两个项目的解决方案: MVC Business

Castle Windsor: Register components across multiple projects in solution我可以看出所有管道都应该在MVC层中,所以我创建了一个IoC容器(在MVC中):

public static class IocContainer
{
    private static IWindsorContainer _container;

    public static void Setup()
    {
        _container = new WindsorContainer().Install(FromAssembly.This());
    }

    public static T Resolve<T>()
    {
        return _container.Resolve<T>();
    }
}

我还在MVC项目中创建了一个安装程序:

public class BusinessLogicInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Component.For<IBusinessFacade>()
            .ImplementedBy<BusinessFacade>()
            .LifestylePerWebRequest());
    }
}

由于intaller知道具体的BusinessFacade类型,MVC依赖于Business层(BusinessFacade类所在的位置)。

因为我还想在业务层使用DI,我如何从Business项目访问IoC容器,而不创建与MVC和Business的循环依赖?

1 个答案:

答案 0 :(得分:1)

在应用程序启动时查看bin文件夹中的所有程序集以查找实现IWindsorInstaller的类型,并运行它们的install方法,传入容器的应用程序级实例(在这种情况下,这是容器包装类中的私有容器)

您通常不应手动解决,应该连接您的应用程序以自动注入您的控制器。如果您必须手动解决,请在控制器级别的每个请求中执行一次。

如果您手动解决所有代码,那么您正在使用服务定位器模式,这是不好的。