我正在为我的 Web api 项目使用简单的注入器。我有一项服务需要会话令牌才能实例化。
public class CustomerService
{
public CustomerService(Auth auth, IRepositoryFactory repositoryFactory)
{
// make post call to another web api for validation
SomeWebApiCallToValidateAuth.vaildate(auth);
}
}
因此,对于此服务,它需要一个身份验证令牌和一个repositoryFactory。我希望它能够注入 auth 参数(来自 http Web 请求),同时使用注册到容器的指定实现来解析存储库工厂。
但我不确定如何使用简单的注入器注册它,或者是否有解决方法。任何帮助都会很棒。谢谢。
您当前的方法有几个缺点:
- 您将运行时数据注入到组件的构造函数中,这可能会导致并发症 https://blogs.cuttingedge.it/steven/posts/2015/code-smell-injecting-runtime-data-into-components/.
- 你利用一个抽象工厂, which 通常不是最好的抽象 https://blogs.cuttingedge.it/steven/posts/2016/abstract-factories-are-a-code-smell/.
- 你的构造函数调用验证,而它除了存储传入的依赖项之外不应该执行任何操作 https://blog.ploeh.dk/2011/03/03/InjectionConstructorsshouldbesimple/。这样你就可以自信地构建您的对象图 https://blog.ploeh.dk/2011/03/04/Composeobjectgraphswithconfidence/.
关于工厂:注入IRepository
而不是一个IRepositoryFactory
。这可能需要您将真实的存储库隐藏在代理后面,如所解释的here https://stackoverflow.com/a/42409598/264697.
关于Auth
值,这取决于需要,但如果Auth
价值是一个重要组成部分API
of CustomerService
,这证明添加Auth
作为方法的论证CustomerService
。如果是实现细节,则注入IAuthProvider
某种抽象,允许您在运行时(构建对象图之后)检索值。同样,这一切都在本文 https://blogs.cuttingedge.it/steven/posts/2015/code-smell-injecting-runtime-data-into-components/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)