DryIoC在类库中

时间:2016-11-27 12:00:42

标签: c# asp.net-mvc dependency-injection inversion-of-control dryioc

我有一个相当简单的解决方案设置:

网络项目 - >服务层 - >存储库

我的IoCbootstrapper类位于我的Web项目中。

var c = new Container();
c.Register<IUserService, UserService>();        
c.Register<ILoggingService, LoggingService>();

没关系,但我的服务依赖于存储库。

有没有办法在Service层类库中有一个“parital bootsrapper”,然后以某种方式作为配置传递给Web项目,因为这样就无法创建服务实例,因为Web项目不知道存储库?

2 个答案:

答案 0 :(得分:1)

让服务层公开一个采取容器并注册所需内容的操作。

引用存储库的服务层

namespace Project.ServiceLayer {
    public static class DryIocExtesnions {
        public static void AddServiceLayer(this IContainer c) {
            c.Register<IUserRepository, UserRepository>();        
            c.Register<IOtherRepository, OtherRepository>();
        }
    }
}

位于Web项目中的IoCbootstrapper。

var c = new Container();
c.Register<IUserService, UserService>();        
c.Register<ILoggingService, LoggingService>();

//Register service layer 
c.AddServiceLayer();

退回,取决于您的偏好,现在服务层必须知道组合根的问题。你可以抽象到你自己的容器,但这可能有点过分。

答案 1 :(得分:0)

您可以将container.WithAutoFallbackResolution与存储库程序集或container.RegisterMany

的某些变体一起使用