Initialize
我有一个架构,其中所有默认依赖项都通过and自动注入OnActionExecuting
。这一切都像一个魅力,因为在运行时(不是测试),默认的控制器激活器将调用这些方法并传入正确的具体对象。美好的。
当我有一个无法在Initialize
andOnActionExecuting
方法中注入的自定义依赖项时,我的问题就开始了。
示例:
public class MyController
{
private IEmailSender emailSender = null;
}
好吧..在运行时emailSender
将为空,除非我将其设置为其他值。在这种情况下,我最终会得到一些不太好的东西,比如:
public class MyController
{
private IEmailSender emailSender = null;
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
if(this.emailSender == null)
this.emailSender = new SomeConcreteEmailSender();
}
}
丑陋的。我不想做这种“如果为空,则实例化”的事情。
一种更复杂的注入IEmailSender
方式是创建我自己的ControllerActivator
,它只会在运行时(而不是测试)中调用,并且会IEmailSender
自动注入而无需执行此“if”。但我不想ControllerActivator
为每个需要注入的控制器创建自定义。
话虽如此,对于 ASP.NET 控制器的自定义依赖注入,什么被认为是标准的?