【发布时间】:2016-01-18 14:03:03
【问题描述】:
新的 aspnet 具有内置依赖注入:启动类实例接收服务、控制器、视图组件。有什么方法可以让我创建我的类的对象并使用 aspnet 功能传递服务?比如:
WebApplicationClassesActivator.Create(typeof(MyClass))
例如,MyClass 包含接收IHostingEnvironment 实例的构造函数。
实际用法:
public class MyController : Controller
{
private readonly IContext Context;
public MyController(IContext context)
{
Context = context;
}
public IActionResult Index(string className)
{
return View(WebApplicationClassesActivator.Create(Type.GetType(className)));
}
}
classsName 是类的名称,例如:
public class A
{
public A(IContext context, IHostingEnvironment env)
{
...
}
}
【问题讨论】:
-
您能详细说明一下吗?现在还不太清楚 - 你想做什么。您是否尝试使用 ASP.NET 内置 DI 容器将某些接口绑定到实现?然后看
services.AddTransient等等。 -
是的,我在 Startup 和控制器操作中添加了一些瞬态、一个作用域和一个单例,我创建了另一个我的类的实例并希望传递一些服务(标准并且我也添加了)跨度>
-
目前还不太清楚你的问题是什么。你能用代码示例说明一下吗?
-
好吧,从我的角度来看,您的场景与 DI 无关,因为它只是按类型名称创建实例(但是它稍微看起来像应用程序中的服务位置例如,使用构造函数注入代码而不是真正的依赖注入 - 因此看起来像一个反模式)。在您的特定情况下,为什么不只是
Activator.CreateInstance(Type.GetType(className))?我错过了什么吗? -
@AndyKorneyev 只是因为
className-class 有需要IContext、IHostingEnvironment等实现实例传入的构造函数。
标签: c# asp.net-mvc dnx