【发布时间】:2018-10-10 23:45:38
【问题描述】:
在依赖注入的文档中,我注意到以下行。
MVC 框架会自动查看服务提供者以 在 Controller 中注册我们的依赖。
然后他们提供了一个构造函数注入的基本示例,不是他们的示例,而是本质上的 this。
public class Example
{
private IFooFactory foo;
public Example(IFooFactory foo) => this.foo = foo;
public void SampleUse()
{
using(var context = foo.Create())
context.DoSomething();
}
}
如果你有一个控制台应用程序,默认情况下它不会查看服务提供者来注册你对具体实现的依赖。有没有办法模拟呢?否则,控制台应用程序将要求您执行以下操作:
public static Main(string[] args)
{
// Stuff to prepare the application and build service provider.
var service = serviceProvider.GetService<IFooFactory>();
using(var context = service.Create())
context.DoSomething();
// OR
var fooFactory = serviceProvider.GetService<IFooFactory>();
new Example(fooFactory).SampleUse();
}
这会产生必须传递IFooFactory 或将您可能希望为结构分开的主要内容的问题。当使用定义的接口创建新类时,如何让控制台应用程序查看提供程序?
【问题讨论】:
-
您也许可以使用Scrutor 来帮助解决这个问题。我自己没有使用过它,但我最近看到它出现了几次。将它与
ActivatorUtilities.CreateInstance结合起来可能会让您满意。 -
@KirkLarkin 我会去看看。
-
看看Composition Root的概念。您的 Main 方法是应用程序的 Composition Root,这是注册和解析的地方。
-
@Steven 谢谢,我去看看。总是渴望学习,所以感激不尽。
标签: c# dependency-injection .net-core