我在项目中使用了以下架构模式,而对于依赖项注入容器,我使用了Autofac,它可以如下正常工作:
并使用以下代码注册程序集
builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces()
.InstancePerRequest();
builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces()
.InstancePerRequest();
builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
.Where(t => t.Name.EndsWith("Entity"))
.AsImplementedInterfaces()
.InstancePerRequest();
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.Where(t => t.Name.EndsWith("Controller"));
但是,如果我使用以下架构模式,那么它将无法正常工作,它将无法解决依赖性。
1)是否可以将这种模式用于控制/依赖注入的反转?
2)如果是,那么如何注册程序集?
注1:-GUI层仅具有接口程序集的引用,而没有具体类程序集的引用。
注意2:-并且我已经检查了bin文件夹中的具体类程序集不存在
注意3:-箭头显示了程序集的引用
答案 0 :(得分:0)
我不知道这是一个可靠的解决方案还是解决方法
如果将具体类及其接口放在同一项目/程序集中并引用该项目,则Autofac不会存在依赖项解析问题,因为它具有接口和类
但是
如果您将具体的类和相关的接口放在单独的项目/程序集中,那么您仅引用接口项目/程序集而不是具体的类/程序集来实现
固体
然后出现问题,因为您仅引用了接口,因此dot net不会将具体类的Assembly(dll)移动到用户界面项目的(asp.net mvc)执行文件夹中,并且Autofac不能解决依赖关系
现在我要解决的方法是,在类库项目的后生成事件中,放置一个命令将每个类库项目的程序集(dll文件)复制到用户界面(asp.net mvc)bin文件夹中,如下所示
然后使用以下代码在Autofac中加载和注册程序集
AppDomain.CurrentDomain.Load("WsafEntities");
AppDomain.CurrentDomain.Load("WsafEntitiesInterfaces");
AppDomain.CurrentDomain.Load("WsafDACs");
AppDomain.CurrentDomain.Load("WsafDACsInterfaces");
AppDomain.CurrentDomain.Load("WsafRepositories");
AppDomain.CurrentDomain.Load("WsafRepositoriesInterfaces");
builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies().Where(t => t.FullName.Contains("Wsaf")).ToArray())
.AsImplementedInterfaces();
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.Where(t => t.Name.EndsWith("Controller"));