当前位置: 首页 > 编程语言 > C#

使用Unity共享解决依赖问题

时间:2023-04-11 00:25:01 C#

使用Unity解决依赖问题一旦我尝试解析我的unitOfWork,我得到这个错误:“IUnitOfWork类型没有可访问的构造函数。”但是,只有当我将unitOfWork的LifetimeManager设置为PerResolveLifetimeManager时才会发生这种情况。如果我只使用默认值,一切正常。我的unitOfWork有一个公共的无参数构造函数。这是我的代码://GlobalasaxIUnityContainerunity=newUnityContainer();unity.RegisterType();unity.RegisterInstance(newUnitOfWork(),newPerResolveLifetimeManager());ControllerBuilder.Current.SetControllerFactory(newIocControllerFactory(unity));//IocControllerFactorypublicclassIocControllerFactory:DefaultControllerFactory{privatereadonlyIUnityContainer_container;公共IocControllerFactory(IUnityContainer容器){_container=容器;}protectedoverrideIControllerGetControllerInstance(RequestContextrequestContext,TypecontrollerType){if(controllerType!=null)return_container.将(控制器类型)解析为IController;否则返回base.GetControllerInstance(requestContext,controllerType);}}//HomecontrollerconstructorpublicHomeController(IUnitOfWorkunitOfWork){}你可以在调用RegisterInstance方法时指定以下Unity内置生命周期管理器类型之一或你的自定义类型:ContainerControlledLifetimeManagerExternallyControlledLifetimeManagerHierarchicalLifetimeManager注意:UsingPerResolveLifetimeManagerorTransientLifetimeManagerwithRegisterInstance是PerResolveLifetimeManager因为它们在每次调用resolve时创建一个新实例从Unity2.0的官方文档中,查看UsingtheLifetimeManagerwiththeRegisterInstancemethod部分。RegisterInstance当你想用unityContainer注册一个已经存在的对象时使用。只要有这种类型的请求,就返回相同的对象实例(而不是新对象)。默认情况下,RegisterInstance方法有一个ContainerControlledLifetimeManager,它在Container的生命周期内管理一个实例。对于PerResolveLifetimeManager,每次请求解析时,都会创建该对象的一个??新实例。所以当你尝试使用PerResolveLifetimeManager和RegisterInstance方法时。错误将被抛回给你。以上就是《C#学习教程:问题解决与Unity依赖共享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢