我有一个相当简单的解决方案设置:
网络项目 - >服务层 - >存储库
我的IoCbootstrapper类位于我的Web项目中。
var c = new Container();
c.Register<IUserService, UserService>();
c.Register<ILoggingService, LoggingService>();
没关系,但我的服务依赖于存储库。
有没有办法在Service层类库中有一个“parital bootsrapper”,然后以某种方式作为配置传递给Web项目,因为这样就无法创建服务实例,因为Web项目不知道存储库?
答案 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