我们有一个 MVC3 控制器,其中有一些我们在控制器构造函数中滚动的“常见”工作。其中一些常见工作是由通过 Unity 动态解析的松散耦合类(例如ourService
)完成的(用于 IoC / 依赖注入)。ourService
在 Controller 的构造函数中为 null(即未解析),但在通常的 Controller 方法中已正确解析。下面的简单演示代码显示了该问题:
public class Testing123Controller : BaseController
{
[Dependency]
public IOurService ourService { get; set; }
public Testing123Controller()
{
ourService.SomeWork(1); // ourService=null here !!
...
}
public ActionResult Index()
{
ourService.SomeWork(1); // resolved properly here here !!
...
}
...
}
问题:
- 为什么 Unity 解析行为会有这种不同?我期望一致的行为。
- 我该如何修复它,以便 Unity 即使在控制器的构造器中也能解决这个问题?
我们设置 Unity 2.0 的方式是:
全球.asax
Application_Start()
{
...
Container = new UnityContainer();
UnityBootstrapper.ConfigureContainer(Container);
DependencyResolver.SetResolver(new UnityDependencyResolver(Container));
...
}
public static void ConfigureContainer(UnityContainer container)
{
...
container.RegisterType<IOurService, OurService>();
...
}
IOurService.cs
public interface IOurService
{
bool SomeWork(int anInt);
}
我们的服务.cs
public class OurService: IOurService
{
public bool SomeWork(int anInt)
{
return ++anInt; //Whew! Time for a break ...
}
}