我正在研究中型WPF应用程序(MVVM),该应用程序将来应该是可扩展和可维护的.因此,我决定使用一个IOC容器(在这种情况下为团结)来保持灵活性. 但是,我不确定在WPF应用程序中放置和配置统一的位置. 我想容器应该在全球范围内访问,以便可以上应用程序类.但是我应该将其作为静态属性吗?我应该在Application_startup()事件处理程序中配置它吗? eg: /// /// Interaction logic for App.xaml /// public partial class App : Application { public static UnityContainer MyUnityContainer; private void Application_Startup(object sender, StartupEventArgs e) { // instan
以下是关于 unity-container 的编程技术问答
我想将接口注入ASP用户控件.我的课看起来像: public partial class PercentByState : CommonControlsData { [Dependency] public IChartService ChartService { get; set; } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataTable dt = ReportService.DoSomething(); } } } public class CommonControlsData : System.Web.UI.UserControl { [Dependency] public IReportService ReportService {
我正在尝试在WebForms项目中实现DI,因此我在UI层中安装了Unity.webforms dll.一旦我做了一个App_start文件夹,就为我创建了一个UnityWebformsStart类文件.在此文件中有一个方法寄存器依赖性,要求编辑. 注册依赖项后的下一步是什么?我需要在global.asax类文件中添加一些内容吗?以及如何解决WebForm中的类型?我是否用任何属性进行装饰? 解决方案 Unity.WebForms dll和Nuget软件包在后台为您做一些事情.它将确保在每个新的Web请求的开头启动子容器,并在每个请求结束时处置.这使您可以以"每个Web请求"的生活方式注册组件(使用Unity中的HierarchicalLifetimeManager),这对于诸如O/RM单位(例如Entity Framework的DbContext)等组件很有用. . 包装确保的另一件事是给定的httphandler(通常是您的页面)及其所有子女控件均为构建.堆积方法是
有人有任何好的例子,即如何使Unity 1.2或2.0与ASP.NET WebForms一起使用? 我以为我已经弄清楚了,但是显然我缺少一些东西.现在我遇到了错误; "没有为此对象定义的无参数构造函数".我记得几年前遇到了这个错误,我只是不记得我做了什么. 显然,团结无法正常工作,因为一路上我忘记了一些东西.任何帮助将不胜感激. 这是我的一些代码: global.asax using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; using Microsoft.Practices.Unity; using PIA35.Unity; namespace PIA35.Web { public class Global : S
我正在使用一些Silverlight组件的ASP.NET应用程序中使用.NET RIA服务的7月CTP.我正在从Silverlight调用RIA服务. 当我尝试在我的域服务中使用统一和构造函数注入时,我的问题就会出现. Silverlight应用程序现在抱怨没有没有参数的构造函数. 我不想拥有一个无参数构造函数,我希望统一能够解析构造函数参数.这可能吗?难道我做错了什么?还是我应该找到另一种注入构造函数参数的方法? public class DashboardService : LinqToEntitiesDomainService { private IUserService userService; public DashboardService(IUserService userService) : base() { if (userService == null)
我们正在尝试将依赖注入用于WCF服务.该服务对统一容器有依赖性.该容器用于查找实现IJob接口的适当类(基于方法调用中的JobKey参数)并调用其上的方法. 该服务是在MVC2中托管的.我从下面的摘要中省略了尽可能多的无关紧要的东西.如果需要的话,可用的完整代码... 我到目前为止所做的: 基于此 msdn actits ,我已经创建了一个自定义InstanceProvider应该实例化我的服务并将其传递给容器. i然后创建了一个非常noddy ServiceBehavior使用InstanceProvider,最后是BehaviorExtension,它只是返回ServiceBehavior. Public Class WCFDIInstanceProvider Implements IInstanceProvider Private ServiceType As Type Private Property _Container
我们公司的一种产品之一由许多小型网络应用程序和Windows服务(又称Windows服务)组成,每个组件都可能居住在另一台计算机中.其中一个是一个WebForms项目,它是其他所有内容的配置集线器. 我们正在设计一个功能,以揭示组件的一般信息.想象一个简单的接口,例如: public interface IStatistics { Statistics GetStatistics(); } 我们想在所有组件上使用相同的界面,因此集中在一个共同的共享组件上.最初实现也将是相同的,因此它与接口一起在同一组件中. 然后,使用公共组件上的实现和接口,在每个组件上公开WCF服务.该实现使用环境类,这些环境类取决于它们的运行何处,例如本地机器时间. . 我想优雅地解决的问题是如何使用相同的界面传递每个组件的所有实现. 我们目前使用 Unity ,但我想我会在任何其他DI解决方案中遇到同样的问题.我想注入相同接口的5个实现(每个组件一个),并能够通过组件区分
我已经解决了这个问题 singleton cally contact(Web请求) )团结. 基本上,我想使用Unity容器每WCF请求创建一个单例对象.尽管我发现其他问题的答案对ASP.NET Web应用程序有帮助,但我不确定这些答案仍然适用于WCF服务. 问题是,在WCF服务中使用CallContext和HttpContext,我们可以创建PercallContextOrrequestLifetimeManager吗?每个wcf呼叫都可以使用单例对象吗? 解决方案 Andrew Oakley's Unity Lifetime经理和WCF . 他既创建了UnityOperationContextLifetimeManager,又创建了UnityInstnaceContextLifetimeManager.完整的代码在博客的底部链接.它不是最简单的实现,并且需要一些时间才能充分了解那里所有的力量.但是包括良好的测试,IMO这就是Unity.wcf应该是的.我自己
是否可以强制wcfsvchost(当我进行F5或在解决方案中调试另一个项目时自动执行)使用自定义USTOM服务? 我使用的自定义服务主机通过使用服务工厂在我的ASP.NET主机容器中运行良好,该工厂又调用自定义服务基础. 但是当WCFSVChost执行时,它不使用我的自定义USTOM服务. 这是可能的吗? 如果没有,我的选择是什么?我认为我必须取消选中"在其他解决方案中调试项目时启动WCF服务主机",该项目在App Properties中的WCF选项中,但我必须创建一个控制台主机容器? ,我无法每次调试其他内容时都能使控制台主机容器自动执行? 我在应用程序属性中的调试中注意到这一点(也许我可以使用类似的东西强制加载自定义ServiceHost) /client:"WcfTestClient.exe" 问题在于我的自定义服务主机注入了一些Unity(ioc)东西,这里是Overriden方法...因此它必须执行否则失败. protec
我正在使用unity.wcf向WCF服务注入依赖项.当我将服务设置为InstanceContextMode.Single时,就会发生问题. 我在Google上发现,当InstanceContextMode设置为Single时,InstanceProvider未调用.还有一个解决方法,但我想知道是否在Unity中对此有一些内置的支持.WCF,因为这显然是一个众所周知的问题. 我在这里找到了信息: 解决方案 我将引用保罗·希尔斯(Paul Hiles)评论在您问的同一问题上: 使用InstanceContextMode.Single使您的服务量表非常糟糕,因此在大多数情况下最好避免使用,尤其是在仅用于允许AppFabric Auto启动时.您可以安全地删除ServiceBehavior属性,然后以另一种方式进行操作. 使用unity.wcf,您可以将您的初始化代码添加到WcfServiceFactory类的ConfigureContainer方法中,该类别是添加un
我对其他问题进行了一些研究后,我有以下内容: MyServiceHost: public class MyServiceHost : ServiceHost { public MyServiceHost(IUnityContainer container, Type serviceType, params Uri[] baseAddresses) : base(serviceType, baseAddresses) { if (container == null) { throw new ArgumentNullException("container"); } foreach (var cd in this.ImplementedContracts.Values) { cd.Behaviors.Add(new Dep
有人可以将我带到WCF服务的统一依赖注入的一个很好的例子吗? 任何博客或MSDN文章也将有所帮助. 解决方案 要向WCF服务注入依赖项,我必须实现服务主机工厂. 我找到了一个分步教程在这里. 基本上您必须: 实现IinstanceProvider,使用容器创建服务 实现IserviceBehavior在端点调度程序中设置实例提供商 扩展服务主机添加新服务行为 扩展Service -HostFactory创建新服务主机 其他解决方案 只需在示例中用iunityContainer替换Iwindsorcontainer,尽管您可能还想将类名称从Windsorxyz更改为Unityxyz:) 其他解决方案 我将尝试尝试unity.wcf library( 如果使用ServiceHost在Windows服务中托管WCF服务,请用自定义Unity.wcf.unityservicehost替换ServiceHost实例.您会发现UnityServiceHo
我在应用程序中使用MVC 5,WCF和Unity Framework. 运行WCF服务时,我要低于错误: Server Error in '/' Application. Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the err
Unity 3.0的Microsoft Unity Bootstrapper在这一行上抛出了错误: FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); 带有以下错误: 类型"系统"的例外. mscorlib.dll,但未在用户代码中处理 其他信息:尝试访问元素作为类型 与数组不兼容. 整个代码都在这里,所有代码都是由Nuget下载的Bootstrapper预制和编写的. bootstrapper生成的文件app_start/unitymvcactivator.cs using System.Linq; using System.Web.Mvc; using Microsoft.Practices.Unity.Mvc; [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(W
这是我的 dad class public class Dad { public string Name { get;set; } public Dad(string name) { Name = name; } } 这是我的测试方法 public void TestDad() { UnityContainer DadContainer= new UnityContainer(); Dad newdad = DadContainer.Resolve(); newdad.Name = "chris"; Assert.AreEqual(newdad.Name,"chris");
将EF核心添加到净标准项目中引入了与其他项目中的Nuget软件包不兼容的传递依赖版本 我有一个具有多个.NET标准2.0项目的解决方案. 一个项目a 使用Google.Protobuf (3.11.2) nuget软件包,取决于 System.Memory (4.5.3) System.Buffers (4.4.0) System.Numerics.Vectors (4.4.0) System.Runtime.CompilerServices.Unsafe (4.5.2) 其他一些项目也取决于System.Memory和所有的都使用相同的依赖性版本. 另一个项目b 使用Microsoft.EntityFrameworkCore (3.1.0) nuget软件包,依赖于 System.Memory (4.5.3) System.Buffers (4.5.0) System.Numerics.Vectors (4.5.
嗨,我对代码的结构有问题,它以某种方式涉及循环依赖性.这是我的代码的说明: i具有 projecta 包含 baseprocessor 和 baseprocessor 有一个称为结构的类在 projectb 中.内部基础处理器,有一个结构作为变量的实例. in projectb 还有其他类,例如定价,交易等. projectb 中的每个类都有一个名为 basestructure 的基类交易类全部从 basestructure 继承. 现在在定价和交易类中,我想在基础处理器 class class basestructure 类中呼叫,这会导致循环依赖. 我尝试的是: 使用Unity,但我不知道如何使其正常工作,因为我尝试使用以下功能: UNITYCONTAINER.REFERENCETYPE(基本处理器Ibaseprocessor) 在 baseStructure 中,它将需要基础处理器的参考,这也会引起循环依赖. 我还尝试了创建 ibaseprocessor
我有一个基于template10的应用程序,并希望使用IOC处理我的依赖项注入.我倾向于为此使用Unity.我的应用程序分为三个组件: UI(Universal App) UI逻辑(通用库) 核心逻辑(便携式库). 我有这些问题: 我应该为整个应用程序使用一个容器,还是为每个程序集创建一个容器? 我应该在哪里创建容器并注册我的服务? 各个组件中的不同类别应该如何访问容器?单例模式? 我已经阅读了很多有关DI和IOC的信息,但是我需要知道如何在实践中应用所有理论,特别是在模板中. 要注册的代码: // where should I put this code? var container = new UnityContainer(); container.RegisterType