我正在考虑在我们的用户界面中使用Microsoft Unity作为我的dependency injection工具。 我们的中间层已经使用温莎城堡,但我想我应该坚持微软。 有没有人有什么最好的dependency injection工具是什么想法? Autofac 城堡MicroKernel /温莎 PicoContainer.NET Puzzle.NFactory Spring.NET StructureMap Ninject 统一 简单的喷油器 NauckIT.MicroKernel WINTER4NET ObjectBuilder的
我一直在寻找dependency injection并阅读一些文章。 但是我仍然无法找出MEF与其他IoC之间的区别。 所以,我的问题是这样的:我应该在哪种情况下使用MEF或IoC容器? 为什么在(WPF&Silverlight)或桌面应用程序中使用MEF for PRISM? 而在Web应用程序中,人们使用IoC容器。 那么,决定使用哪种依赖技术的标准是什么呢? 我已经通过文章http://devlicio.us/blogs/casey/archive/2009/12/18/what-is-the-difference-between-an-ioc-container-and-mef.aspx ,但我无法确定任何东西。
我试图绑定一个通用的IRepository <>接口到我的通用库<> – 但它总是返回null? 我曾尝试过各种各样的事情: Bind(typeof(IRepository<CustomerModel>)).To(typeof(Repository<CustomerModel>)); Bind(typeof(IRepository<>)).To(typeof(Repository<>)); 但是,如果我通过一个非generics的接口和类,那么它的作品就像一个梦想?
我趾高气昂地使用IoC框架,并select使用Unity。 我仍然不能完全理解的一件事是如何更深入地parsing应用程序中的对象。 我怀疑我刚才没有弄清灯泡。 所以我想在伪代码中做如下的事情 void Workflow(IUnityContatiner contatiner, XPathNavigator someXml) { testSuiteParser = container.Resolve<ITestSuiteParser> TestSuite testSuite = testSuiteParser.Parse(SomeXml) // Do some mind blowing stuff here } 所以testSuiteParser.Parse执行以下操作 TestSuite Parse(XPathNavigator someXml) { TestStuite testSuite = ??? // I want to get this from my Unity Container List<XPathNavigator> aListOfNodes = DoSomeThingToGetNodes(someXml) foreach (XPathNavigator blah in aListOfNodes) { //EDIT […]
我有一个MVC 3的Web应用程序,我正在使用entity framework的数据访问。 此外,我已经简单地使用了存储库模式,例如所有与产品相关的东西都在“ProductRepository”中处理,所有与User相关的东西都在“UserRepository”中处理。 因此,我使用UNITY容器来创build一个DataContext的单例实例,我将其注入到每个存储库中。 在Google上快速search,每个人都build议你不要使用DataContext的单例实例,因为它可能会在未来给你一些内存泄漏。 所以,受这篇文章的启发,为每个Web请求创build一个DataContext的单例实例就是答案(如果我错了,请纠正我的错误!) http://blogs.microsoft.co.il/blogs/gilf/archive/2010/05/18/how-to-manage-objectcontext-per-request-in-asp-net.aspx 但是,UNITY不支持“每个networking请求”终身pipe理器。 但是,可以实现自己的自定义生命期pipe理器,它可以为您处理。 实际上,这是在这篇文章中讨论: Singleton每呼叫上下文(Web请求)在Unity 问题是,现在我已经实现了上述职位描述的自定义生存期pipe理器,但是我不确定这是否可以这样做。 我也想知道datacontext实例在提供的解决scheme中的位置? 我错过了什么吗? 有没有更好的办法来解决我的“问题”? 谢谢! **添加了关于我的实现的信息** 以下是我的Global.asax,Controller和Repository中的代码片断。 这清楚地表明了我的实施情况。 Global.asax中 var container = new UnityContainer(); container .RegisterType<ProductsRepository>(new ContainerControlledLifetimeManager()) .RegisterType<CategoryRepository>(new ContainerControlledLifetimeManager()) .RegisterType<MyEntities>(new PerResolveLifetimeManager(), dbConnectionString) 调节器 private ProductsRepository _productsRepository; private CategoryRepository _categoryRepository; public ProductsController(ProductsRepository productsRepository, CategoryRepository categoryRepository) { _productsRepository = productsRepository; _categoryRepository = categoryRepository; } public […]
在跟随Krzysztof的声明 , 温莎做了比其他IoC更多,我想了解这些IoC的相互堆叠和城堡温莎提供的好处/额外设施。 有比较吗? 有人可以帮助我了解Castle Windsor提供的其他IoCfunction吗?
我有一个spring bean(dao)对象,我通过下面的xml在我的ServletContext中实例化: <bean id="userDao" class="com.company.dao.impl.UserDaoImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean> 这个bean是在我的webapp-servlet.xml文件中声明的,并被我的应用程序在ServletContext中使用。 我也使用SpringSecurity。 这是我的理解,它运行在不同的上下文(SecurityContext)。 我的应用程序有一个webapp-security.xml,我实例化一个自定义身份validation提供程序。 我想使用我的应用程序中使用我的dao也做我的安全上下文中的用户查找,但是当我运行: <bean id="userAuthenticationProvider" class="com.company.security.UserAuthenticationProvider"> <property name="userDao" ref="userDao" /> </bean> 我得到的错误说,没有这样的bean“userDao”。 这个bean在我的其他上下文中声明的bean中自动assembly,但不在我的安全上下文中。 根据Spring文档,我相信web.xml中需要两个独立的上下文 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <listener> <listener-class> org.springframework.security.web.session.HttpSessionEventPublisher </listener-class> </listener> 所以我的问题是,我怎样才能访问我的我的SecurityContext中的我的ServletContext居住的DAO? 有我的道的范围修饰符,或者我可以以某种方式在我的身份validation提供程序在运行时获取ServletContext? 作为参考,这是我想如何在我的身份validation提供程序中使用它: public class UserAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider { @Override protected UserDetails retrieveUser(String userName, UsernamePasswordAuthenticationToken authenticationToken) throws AuthenticationException { // […]
我决定开始使用Ninject,并面临一个问题。 说我有以下情况。 我有一个IService接口和2个类来实现这个接口。 而且我也有一个类,它有一个构造函数获得IService和一个int 。 我怎样才能创build这个类的实例与Ninject(我不想强硬这个int,我想每次我得到一个实例时通过它)? 以下是一些说明情况的代码: interface IService { void Func(); } class StandardService : IService { public void Func() { Console.WriteLine("Standard"); } } class AlternativeService : IService { public void Func() { Console.WriteLine("Alternative"); } } class MyClass { public MyClass(IService service, int i) { this.service = service; } public void Func() { service.Func(); […]
我正在看这个教程http://asp-umb.neudesic.com/mvc/tutorials/validating-with-a-service-layer–cs关于如何包装我的validation数据。 我想使用dependency injection。 我正在使用ninject 2.0 namespace MvcApplication1.Models { public interface IValidationDictionary { void AddError(string key, string errorMessage); bool IsValid { get; } } } //包装 using System.Web.Mvc; namespace MvcApplication1.Models { public class ModelStateWrapper : IValidationDictionary { private ModelStateDictionary _modelState; public ModelStateWrapper(ModelStateDictionary modelState) { _modelState = modelState; } #region IValidationDictionary Members public void AddError(string key, string […]
我了解DI背后的概念,但我只是了解不同的IoC容器可以做什么。 似乎大多数人主张使用IoC容器来连接无状态服务,但是如何将它们用于实体这样的有状态对象呢? 无论是对还是错,我通常都会对自己的实体进行行为,即使这种行为需要外部的类。 例: public class Order : IOrder { private string _ShipAddress; private IShipQuoter _ShipQuoter; public Order(IOrderData OrderData, IShipQuoter ShipQuoter) { // OrderData comes from a repository and has the data needed // to construct order _ShipAddress = OrderData.ShipAddress; // etc. _ShipQuoter = ShipQuoter; } private decimal GetShippingRate() { return _ShipQuoter.GetRate(this); } } 正如你所看到的,依赖关系是注入构造函数。 […]