c# – 使用Autofac创建具有依赖关系的类的实例
发布时间:2020-12-15 07:46:50 所属栏目:百科 来源:网络整理
导读:问题: 假设班级: public class MyAwesomeClass{ private IDependCls _dependCls; public MyAwesomeClass(IDependCls dependCls) { _dependCls = dependCls; }} 在其他地方我需要获得该类的实例,如下所示: public class SomewhereElse{ public void Awesom
问题:
假设班级: public class MyAwesomeClass { private IDependCls _dependCls; public MyAwesomeClass(IDependCls dependCls) { _dependCls = dependCls; } } 在其他地方我需要获得该类的实例,如下所示: public class SomewhereElse { public void AwesomeMethod() { //... // AwesomeStuff //... var GetErDone = new MyAwesomeClass(); // PROBLEM! No constructor with 0 arguements } } 问题是,我 建议的解决方案1: A)必须制作一个额外的构造来解决依赖关系吗?例如: public MyAwesomeClass() // new constructor { _dependCls = DependencyResolver.Current.GetService<IDependCls>(); } public class SomewhereElse { public void AwesomeMethod() { var GetErDone = new MyAwesomeClass(); // IT WORKS!! } } 提议的解决方案2: B)在var GetErDone之前使用AwesomeMethod中的解析器 public class SomewhereElse { public void AwesomeMethod() { var depCls = _dependCls = DependencyResolver.Current.GetService<IDependCls>(); var GetErDone = new MyAwesomeClass(depCls); // IT WORKS!! } } Autofac解决方案? C)其他一些Autofac方式? 寻找最佳实践,以及尽可能好的Autofac解决方案.我认为第一种方式是最差的,因为可选的依赖性可能会导致很多混乱. 摘要: 当MyAwesomeClass具有依赖关系时,如何获得新的MyAwesomeClass()? 解决方法
看看
Composition Root模式.
你是对的,提升依赖性解决方案只会将问题转移到另一个地方.但是,如果继续在对象图中向上移动,则会到达应用程序的入口点.在那里,您将构成对象图. 将其与Service Locator anti-pattern(在您的情况下使用客户端类中的DependencyResolver)进行比较,您将看到Composition Root是一个出色的解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |