c#mvc从字符串名称动态创建控制器 - eval?

fra*_*ank 3 c# asp.net-mvc

我想通过字符串名称创建一个控制器的新实例.在经典ASP中我会做一个eval,但是如何在c#中做到这一点?

例如:

如果我想创建一个"AccountController"的实例,通常我会写:

var Acc = new AccountController();
Run Code Online (Sandbox Code Playgroud)

现在,如果控制器名称仅作为字符串提供,我该如何实例化该对象?

例如,

var controllerName = "AccountController";

var acc = new eval(controllerName)();
Run Code Online (Sandbox Code Playgroud)

感谢您的任何帮助!

坦率

epi*_*tka 7

如果您的控制器在程序集中,您只需要一个类名,否则您需要一个完全限定的名称(命名空间程序集).你会用反射来做.就像是:

Type t = Type.GetType("NameOfController");
var  c = Activator.CreateInstance(t);
Run Code Online (Sandbox Code Playgroud)

还有其他方法,但都涉及反射(System.Reflection).


Jas*_*son 5

IOC容器将允许此功能.注册控制器类型时,只需提供名称即可.然后,您可以通过提供名称从控制器返回完全实例化的对象.

此外,大多数IOC容器允许您根据接口或基类自动注册类型,因此您甚至不需要手动注册所有控制器.

AutoFac中的一个示例

var b = new ContainerBuilder();
b.Register<AccountController>().As<IController>().Named("AccountController");
var c = b.Build();

var controller = c.Resolve<IController>("AccountController");
Run Code Online (Sandbox Code Playgroud)