1

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

Web 项目 --> 服务层 --> 存储库

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

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

这很好,但我的服务取决于存储库。

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

4

2 回答 2

1

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

引用存储库的服务层

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

IoCbootstrapper 位于 web 项目中。

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

//Register service layer 
c.AddServiceLayer();

退后一步,根据您的偏好,现在服务层必须意识到来自组合根的关注点。您可以将其抽象到您自己的容器中,但这可能有点矫枉过正。

于 2016-11-27T17:31:37.967 回答
0

可能您可以container.WithAutoFallbackResolution与存储库程序集或某些变体一起使用container.RegisterMany

于 2016-11-30T21:03:41.250 回答