Questions tagged «unity-container»

Unity应用程序块(即Unity)是.NET的轻量级,可扩展的依赖项注入容器,具有拦截功能。不要_not_使用此标记来引用Unity游戏引擎。

7
主要的C#DI / IoC框架如何比较?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 改善这个问题 冒着进入神圣战争领土的风险,这些流行的DI / IoC框架的优点和缺点是什么,可以轻易地认为是最好的吗?..: Ninject 统一 温莎城堡 Autofac 结构图 我这里没有列出其他的C#DI / IoC框架吗? 就我的用例而言,我正在构建客户端WPF应用程序和WCF / SQL服务基础结构,易用性(尤其是在语法简洁明了方面),一致的文档,良好的社区支持和性能都是重要因素。由我选择。 更新: 引用的资源和重复的问题似乎已经过时了,知道所有这些框架的人能挺身而出并提供一些真正的见解吗? 我意识到,关于该主题的大多数意见可能会带有偏见,但我希望有人花时间研究所有这些框架,并且至少要有一个客观的比较。 如果以前没有做过,我很愿意进行自己的调查,但是我认为这至少是一些人已经做过的。 第二次更新: 如果您确实有多个DI / IoC容器的使用经验,请对这些容器的优缺点进行排名和总结,谢谢。这不是发现人们制作的所有晦涩的小容器的一种练习,我正在寻找流行的(和活动的)框架之间的比较。


5
是否存在用于初始化通过DI容器创建的对象的模式
我试图让Unity来管理对象的创建,并且我想拥有一些直到运行时才知道的初始化参数: 目前,我唯一想到的方法是在接口上使用Init方法。 interface IMyIntf { void Initialize(string runTimeParam); string RunTimeParam { get; } } 然后要使用它(在Unity中),我会这样做: var IMyIntf = unityContainer.Resolve<IMyIntf>(); IMyIntf.Initialize("somevalue"); 在这种情况下,runTimeParam将在运行时根据用户输入确定参数。此处的普通情况只是返回的值,runTimeParam但实际上,参数将类似于文件名,而initialize方法将对文件进行处理。 这会产生许多问题,即该Initialize方法在界面上可用并且可以多次调用。在实现中设置标志并在重复调用时引发异常Initialize似乎很麻烦。 在我解析界面的那一刻,我不想了解任何有关的实现IMyIntf。不过,我真正想要的是该接口需要某些一次性初始化参数的知识。有没有一种方法可以用此信息注释(属性?)接口,并在创建对象时将其传递给框架? 编辑:描述了更多界面。


9
确保控制器具有无参数的公共构造函数错误
我遵循了本教程,该教程效果很好,直到我修改了我的教程DbContext以拥有其他构造函数。我现在在分辨率方面遇到问题,不确定如何解决此问题。有没有一种简单的方法可以强制它抓住无参数的构造函数,或者我处理方法不正确? DbContext 有两个构造函数: public class DashboardDbContext : DbContext { public DashboardDbContext() : base("DefaultConnection") { } public DashboardDbContext(DbConnection dbConnection, bool owns) : base(dbConnection, owns) { } } SiteController 构造函数: private readonly IDashboardRepository _repo; public SiteController(IDashboardRepository repo) { _repo = repo; } 仓库: DashboardDbContext _context; public DashboardRepository(DashboardDbContext context) { _context = context; …

5
Ninject vs Unity for DI [关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 改善这个问题 我们正在使用ASP.net MVC。 以下哪个是最好的DI框架Ninject或Unity?为什么?

7
我可以将构造函数参数传递给Unity的Resolve()方法吗?
我正在使用Microsoft的Unity进行依赖项注入,并且我想执行以下操作: IDataContext context = _unityContainer.Resolve<IDataContext>(); var repositoryA = _unityContainer.Resolve<IRepositoryA>(context); //Same instance of context var repositoryB = _unityContainer.Resolve<IRepositoryB>(context); //Same instance of context IDataContext context2 = _unityContainer.Resolve<IDataContext>(); //New instance var repositoryA2 = _unityContainer.Resolve<IRepositoryA>(context2); RepositoryA并且RepositoryB都有一个构造函数的IDataContext参数,我想团结与我通过它的上下文初始化存储库。另请注意,该代码IDataContext未在Unity中注册(我不需要3个实例IDataContext)。

11
无法使用Unity将依赖项注入ASP.NET Web API控制器
使用IoC容器将依赖项注入ASP.NET WebAPI控制器中,是否有人能成功运行?我似乎无法使其正常工作。 这就是我现在正在做的。 在我的global.ascx.cs: public static void RegisterRoutes(RouteCollection routes) { // code intentionally omitted } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); IUnityContainer container = BuildUnityContainer(); System.Web.Http.GlobalConfiguration.Configuration.ServiceResolver.SetResolver( t => { try { return container.Resolve(t); } catch (ResolutionFailedException) { return null; } }, t => { try { return container.ResolveAll(t); } …

5
IUnityContainer.Resolve <T>引发错误,声称它不能与类型参数一起使用
昨天我实现了代码: CustomerProductManager productsManager = container.Resolve&lt;CustomerProductManager&gt;(); 它是可编译的并且可以正常工作。 今天(可能我已经修改了一些东西),我不断收到错误: 非泛型方法'Microsoft.Practices.Unity.IUnityContainer.Resolve(System.Type,string,params Microsoft.Practices.Unity.ResolverOverride [])'不能与类型参数一起使用 我的同事具有相同的源代码,并且没有相同的错误。为什么?如何解决问题? 聚苯乙烯 行“使用Microsoft.Practices.Unity;” 在使用部分中。 我试图用非通用版本替换通用版本: CustomerProductManager productsManager = (CustomerProductManager)container.Resolve(typeof(CustomerProductManager)); 并得到另一个错误: 方法'Resolve'的重载没有接受'1'参数 似乎未引用其中一个程序集。但是,哪个程序集呢?我引用了其中两个:1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll PPS我也遇到过类似的问题http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205,但已解决为“不是bug” 任何想法都会有所帮助

4
MEF与任何IoC
从Microsoft的Managed Extensibility Framework(MEF)和各种IoC容器(例如Unity)来看,我看不到何时使用一种解决方案。更具体地说,似乎MEF可以处理大多数IoC类型模式,而像Unity这样的IoC容器则不是必需的。 理想情况下,我希望看到一个很好的用例,其中将使用IoC容器代替MEF或作为MEF的补充。

4
使用Unity如何将命名依赖项注入到构造函数中?
我IRespository在以下代码中两次注册了(带有名称): // Setup the Client Repository IOC.Container.RegisterType&lt;ClientEntities&gt;(new InjectionConstructor()); IOC.Container.RegisterType&lt;IRepository, GenericRepository&gt; ("Client", new InjectionConstructor(typeof(ClientEntities))); // Setup the Customer Repository IOC.Container.RegisterType&lt;CustomerEntities&gt;(new InjectionConstructor()); IOC.Container.RegisterType&lt;IRepository, GenericRepository&gt; ("Customer", new InjectionConstructor(typeof(CustomerEntities))); IOC.Container.RegisterType&lt;IClientModel, ClientModel&gt;(); IOC.Container.RegisterType&lt;ICustomerModel, CustomerModel&gt;(); 但是,当我想解决此问题(使用IRepository)时,我必须像这样手动解决: public ClientModel(IUnityContainer container) { this.dataAccess = container.Resolve&lt;IRepository&gt;(Client); ..... } 我想做的是在构造函数中解析它(就像IUnityContainer)。我需要某种方式说出要解决的命名类型。 这样的事情:(注意:不是真实的代码) public ClientModel([NamedDependancy("Client")] IRepository dataAccess) { this.dataAccess = dataAccess; ..... …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.