在Web API项目中使用Unity时,我以标准方式在UnityContainer中注册了一个对象。如何在.NET Web API中使用Unity进行解析
public static class UnityConfig {
public static void RegisterComponents() {
var container = new UnityContainer();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
container.RegisterType<IMyService, MyService>();
...
}
}
我解决这样我班的一个对象(这不是一个控制器,所以我不能使用构造函数注入):
var myService = (IMyService)GlobalConfiguration.Configuration.DependencyResolver
.GetService(typeof(IMyService));
是,正确的方法是什么?它看起来很笨重。是否有更简洁的方式来进行此调用,例如直接访问容器的Resolve<T>()
方法?
(我可以在这里鸡蛋里挑骨头,但我是新来使用Unity使用Web API,并试图了解的最佳实践。)
对于非控制器,为什么不直接将实例保持为静态(单例)并从那里访问? – vendettamit
你从哪里调用代码?你说这是一个非控制器。这是一项服务吗?它在哪里使用? –
此代码位于我创建的自定义属性中,这使事情变得复杂。我对Spock的答案感到满意(简而言之,我应该依赖依赖注入而不是直接调用DependencyResolver),但事实证明,Unity无法注入到属性中(参见[这里](http://stackoverflow.com/)问题/ 9677029/injecting-class-into-authentication-attribute-using-unity-2-and-mvc-3)and [here](http://stackoverflow.com/questions/6121050/mvc-3-unity-2 -inject-dependencies-into-a-filter)),所以我的选择是保持我的代码原样或实现一个自定义的FilterAttributeFilterProvider。 – Keith