Tag: 统一容器

Unity注册非generics接口的generics类型

我的情景看起来(对我来说)很直接,但我找不到解决方案。 我有这种情况 public class Class : IInterface where T : class { } 接口不能通用(来自WCF lib。) 所以我想注册这样的界面 container.RegisterType(typeof (IInterface ), typeof (Class)); 然后用T解决它 我该怎么做? 我错过了什么? 我的意图是做类似的事情 container.Resolve(/* specify T */);

确保控制器在Unity中具有无参数的公共构造函数

我在控制器中遇到了这个问题: 尝试创建类型为“ * .WebMvc.Controllers.HomeController”的控制器时发生错误。 确保控制器具有无参数的公共构造函数。 找到ApiController的解决方案,但没有找到任何关于普通控制器的信息。 从头开始创建新的MVC 4项目。 HomeController.cs: public class HomeController : Controller { private IAccountingUow _uow; public HomeController(IAccountingUow uow) { _uow = uow; } UnityDependencyResoler.cs: public class UnityDependencyResolver : IDependencyResolver { private IUnityContainer _container; public UnityDependencyResolver(IUnityContainer container) { _container = container; RegisterTypes(); } public object GetService(Type serviceType) { try { return _container.Resolve(serviceType); }catch […]

如何在mvc 4上通过统一在控制器中注入构造函数

我正在使用Unity 1.1版本,我无法注入构造函数。 我的代码是: 在global.asax中注册依赖项Application_Startup方法: Core.Instance.Container.RegisterType(); 注入构造函数: private ICartBusiness _business; public FooController(ICartBusiness business) { _business = business; } mvc抛出此exception: 没有为此对象定义无参数构造函数。 PS:我不能使用任何新版本的统一,因为我使用过于引用的旧dll所以我不能使用unity.WebApi或unity.Mvc3 dlls。 这该怎么做?

Unity:更改默认生命周期管理器以进行隐式注册和/或禁用它们

Unity容器将自动解析它可以自己解决的任何类型,而无需手动注册。 这在某些方面很好,但我遇到的问题是它使用TransientLifetimeManager进行这种类型的分辨率,而我几乎总是想要一个ContainerControlledLifetimeManager 。 当然,我仍然可以手动将我的类型注册为单身人士,但如果我忘了,而不是在启动时获得未处理的exception,应用程序将成功启动,一切似乎都会起作用。 但是最终会出现一些错误,可能是非常微妙的,难以诊断的错误,因为有一个类型的多个实例是一个单例。 所以我的问题是:有没有办法可以指定不同的默认生命周期管理器或完全禁用默认的自动解析行为,并将容器限制为我自己注册的类型(直接或通过我自己的约定)?

使用Unity将依赖项注入自定义ActionFilter

目前,我有一个自定义ControllerFactory,我注入我的Unity容器: 在global.asax Application_Start()中: var container = InitContainer(); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); var factory = new UnityControllerFactory(container); ControllerBuilder.Current.SetControllerFactory(factory); 在控制器工厂中,我将控制器设置为使用自定义ActionInvoker,如下所示: protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) { var controller = base.GetControllerInstance(requestContext, controllerType) as Controller; if (controller != null) controller.ActionInvoker = new UnityActionInvoker(_container); return controller; } 最后在我的自定义ActionInvoker中,我尝试使用ActionInvokers容器构建调用的操作: protected override ActionExecutedContext InvokeActionMethodWithFilters( ControllerContext controllerContext, IList filters, ActionDescriptor actionDescriptor, IDictionary parameters) […]