Tag: unity container

Unity – loadConfiguration,如何只解析那些配置的

我想要实现的目标:让Unity从配置文件加载映射,然后在源代码中解析从所述配置文件加载的类型 App.Config中 码 IUnityContainer container; container = new UnityContainer(); // Read interface->type mappings from app.config container.LoadConfiguration(); // Resolve ILogger – this works ILogger obj = container.Resolve(); // Resolve IBus – this fails IBus = container.Resolve(); 问题:有时IBus将在App.config中定义,有时它不会在那里。 当我尝试解析一个接口/类并且它不存在时,我得到一个exception。 有人可以在这教育我吗? 谢谢,安德鲁

棱镜模块加​​载锁定调度程序线程。 有没有解决的办法?

Prism应用程序我执行多个启动任务可能需要一段时间,如果其中一些任务无法正确执行,它将使应用程序在function上无法使用。 因此,我有一个在Shell之前显示的启动屏幕,并显示每个启动任务的状态日志。 (启动任务由模块中的共享服务处理。)屏幕包含一个将IsIndeterminate设置为True的ProgressBar(至少在启动任务运行时)。 我还在启动任务中包含了在显示日志中显示模块本身的初始化。 (日志中的第一项任务。) 我遇到的问题是我的一个模块加载了一个相当大的第三方库。 我最初有这个模块只是记录它的所有类型并将实际分辨率留给Unity。 但是,这提出了两个问题:1)当用户到达加载此模块中的视图的点时,应用程序将在加载此大型库时暂停。 2)在用户与视图交互之前,此模块中的某些业务逻辑应处于活动状态。 所以在我的IModule实现中,而不是为我的大多数服务调用RegisterType(),我正在调用RegisterInstance。 这一切都很好。 问题是,现在当Unity在这个模块中创建所有服务时,这个第三方库正在预先加载,我的模块初始化需要一段时间才能完成。 我的启动屏幕中的进度条没有动画,因为Dispatcher线程似乎被占用加载模块。 我可以做些什么来让这个缓慢加载模块异步加载或类似,以便进度条动画? 如果不可能的话,这不是世界的尽头,但拥有它会很好。

将LifetimeManager默认为单例管理器(ContainerControlledLifetimeManager)?

我正在使用Unity IoC容器来执行dependency injection。 我设计我的系统的想法是,至少对于单个分辨率,层次结构中的所有类型都将表现为单例,即,该层次结构中的相同类型分辨率将导致相同的实例。 但是,我(a)想要扫描我的程序集以查找类型,并且(b)不希望明确告诉团结在配置文件中注册类型时将每个类型解析为单例。 那么,有没有办法告诉团结将所有已注册的映射视为单例?

创建对象的线程中的dependency injection

如果我有一个从主应用程序启动的线程。 在此线程中生成事件。 每次生成事件时都会创建一个对象。 在该对象中需要依赖,因此我想注入该对象。 如何将此依赖性传递给创建的对象? 我是否需要向下传递depandancy(并让在线程中工作的类知道依赖性)或者是否有更好的方法来执行此操作? 我正在使用Unity btw。

Unity中的PerThreadLifetimeManager

在Unity PerThreadLifetimeManager文档中,我读到:“ 此生命周期管理器不会处置它所拥有的实例 ”。 参考: http : //msdn.microsoft.com/en-us/library/ff647854.aspx 因此,如果我使用的是ThreadPool,是否意味着在返回池中之前,在ThreadPool的Thread上使用Unity解析的对象将不会在该线程的完成工作结束时处理掉? 任何模式或想法如何我可以确保对象确实被处置并从线程池中获得一个干净的线程? 谢谢!

如何在Unity中使用不同的构造函数两次注册相同的类型?

我正在尝试注册相同的类型,但有两个不同的构造函数。 当我尝试解决时,我在第二个Resolve上得到“ 依赖失败的解决方案”。 var container = new UnityContainer(); container.RegisterType() .RegisterInstance(new Bar()) .RegisterType() .RegisterInstance(new Bar(“foo”)); Bar bar1 = (Bar)container.Resolve(); Bar bar2 = (Bar)container.Resolve(“foo”); // ERROR 我做错了什么?

创建配置节处理程序时发生错误

我有一个dot.NET 4.0 Web应用程序,其中定义了自定义部分: …. 在web.config文件的末尾我有相应的部分: …. ….. 每次我调用System.Configuration.ConfigurationManager.GetSection(“registrations”); 我得到以下exception: 为注册创建配置节处理程序时发生错误:给定的程序集名称或代码库无效。 (来自HRESULT的exception:0x80131047)(C:\ … \ web.config第13行) 我也在使用Unity,但不知道这是否与错误有关。 你以前遇到过这个错误吗? 我该如何解决? 我是否需要用其他东西替换IgnoreSectionHandler ?

在Unity配置中,如何将connectionString传递给构造函数?

我在web.config中设置统一配置,我有一个类型,我想传递给它的连接字符串已经存在于同一个web.config文件中。 在统一部分有: 但是就像我在同一个.config文件中写两次相同的conectionString一样,是否有另一种更好的方法将connectionString的名称传递给类型数据库构造函数以避免web.config中的重复?

Api Controller具有无参数的公共构造函数错误

我使用Unity来做我的DI,我遇到了以下错误: – “尝试创建’UploadController’类型的控制器时发生错误。确保控制器具有无参数的公共构造函数。” 我有以下UnityResolver: – public class UnityResolver : IDependencyResolver, IDependencyScope, System.Web.Http.Dependencies.IDependencyResolver { protected IUnityContainer container; public UnityResolver(IUnityContainer container) { if (container == null) { throw new ArgumentNullException(“container”); } this.container = container; } public object GetService(Type serviceType) { try { return container.Resolve(serviceType); } catch (ResolutionFailedException) { return null; } } public IEnumerable GetServices(Type serviceType) { […]

基于路由参数的子容器注册

我们有一个多宿主的ASP.NET MVC应用程序,它为多个客户端托管一个预订引擎。 每个客户端都有多个可以影响Unity Container配置的软件包。 我们正在为每个请求创建一个子容器,并根据通过该路由传递的客户端和包参数注册不同的接口实现。 目前,我们通过执行以下操作来实现此目的: Controller有一个属性ServiceLocator,它使用一个统一容器来解析依赖关系。 控制器将IUnityContainer注入并分配给属性。 Controller有一个自定义ActionFilterAttribute,它访问控制器统一容器,创建子容器,根据客户端和包路由参数有条件地注册依赖项实现,然后将此子容器分配给控制器的serviceLocator。 Controller根据需要使用serviceLocator来解析各个依赖项。 这有效,但真的很笨拙,我觉得最终它将是不可持续的。 我正在寻找更好的解决方案。 我们现在仍然坚持使用.NET 4.0,直到我们结束了一些遗留的东西,所以我专门针对Unity 2。 我已经尝试创建一个自定义IDependencyResolver来创建子容器并根据路径参数注册依赖项,这些参数在Session或HttpContext项中存储容器但遇到了空HttpContext问题。 是否还有其他方法可以在路由上进行注册并将依赖项注入到控制器构造函数中? 最终我还需要一个Web API解决方案。 编辑:示例 public interface IRateService { … } public class RemoteRateService : IRateService { … } public class LocalRateService : IRateService { … } public class CustomDependencyResolver : IDependencyResolver { public object GetService(Type serviceType) { if(ChildContainer == […]