Tag: ioc container

如何重置IOC容器中的所有实例

我使用MVVM Light框架制作了一个C#WPF应用程序。 我的应用程序使用ViewModelLocator类在运行时定位视图模型。 ViewModelLocator使用了与MVVM Light框架一起提供的SimpleIoc类。 这是我的场景:用户登录可以使用我的应用程序。 在注销时,我想处置/重置/重新创建所有viewmodel实例,以便为下一个用户提供干净的环境。 我试图在ViewModelLocator类中实现Cleanup()方法,但它无法正常工作。 不工作意味着(第二个)用户看到之前登录的用户的数据。 第一次尝试: public static void Cleanup() { SimpleIoc.Default.Reset(); } 第二次尝试: public static void Cleanup() { SimpleIoc.Default.Unregister(); SimpleIoc.Default.Unregister(); SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); } 第三次尝试(不是我想要的,但它是一种解决方法): public static void Cleanup() { // I implemented the ICleanup interface in my viewmodels // The cleanup method clears all my variables eg: myCollection.clear(); SimpleIoc.Default.GetInstance().Cleanup(); SimpleIoc.Default.GetInstance().Cleanup(); […]

IoC比较

在开发ASP.NET Web应用程序项目时要考虑哪个IoC以及不同IoC有哪些优势? ObjectBuilder的 统一 Spring.NET

如何使用Unity的名称动态注册generics类?

我有一个包含很多类(300+)和BaseClass的程序集,我希望注册一个带接口的generics类。 如果要解析接口的对象数组,则必须通过{ Name }注册。 我想自动在MainViewModel中有一个对象数组。 有没有办法用reflection自动化这个? 有什么建议? 示例(伪): public class BaseClass { public void doFoo(); } public ClassNumber001 : BaseClass { } public ClassNumber002 : BaseClass { } public interface ISuperman { } public class Superman : ISuperman where T : BaseClass { } public MainViewModel(IEnumerable lotsofSuperman) { } 手工实例: container.RegisterType<ISuperman, Superman >(“ClassNumber001”); container.RegisterType<ISuperman, Superman […]

Simple Injector:在基类中注入属性

几周以来,我一直在使用Simple Injectordependency injection容器,取得了巨大的成功。 我喜欢简单的配置它。 但现在我有一个我不知道如何配置的设计。 我有一个基类,其中有许多类型派生,我想将dependency injection基类的属性,但不必为每个派生类配置。 我尝试使用属性执行此操作,但Simple Injector不支持属性。 这是我设计的精简版。 public interface Handler where TMessage : Message { void Handle(TMessage message); } public abstract class BaseHandler { // This property I want to inject public HandlerContext Context { get; set; } } // Derived type public class NotifyCustomerHandler : BaseHandler, Handler { public NotifyCustomerHandler(SomeDependency dependency) […]

Unity .NET:依赖项列表

是否可以在Unity或其他类型的IoC库中注入这样的依赖项列表 ? public class Crawler { public Crawler(IEnumerable parsers) { // init here… } } 通过这种方式,我可以在我的容器中注册多个IParser,然后解决它们。 可能吗? 谢谢

Castle Windsor:强制解析器使用指定的构造函数

这是一个例子: interface IComponentA {}; class ComponentA : IComponentA { }; interface IComponentB { }; class ComponentB : IComponentB { }; interface IComponentC { }; class ComponentC : IComponentC { public ComponentC(IComponentA a) { Console.WriteLine(“Constructor A”); } public ComponentC(IComponentB b) { Console.WriteLine(“Constructor B”); } }; 所有这些组件都在Castle Windsor容器中注册。 但是ComponentC类有2个重载的构造函数。 当激活ComponentC时,可以使用它们中的任何一个。 我需要使用ComponentC(IComponentB b)构造函数。 我暂时使用UsingFactoryMethod()方法来解决这个问题: container .Register(Component .For() .ImplementedBy()) […]

使用primitive-arguments构造函数注册一个类型?

我有一个类在其构造函数中有一些原始类型参数,如字符串等。 我应该如何使用统一容器注册类型? public LoginManager( IRegionManager regionManager, IEventAggregator eventAggregator, string mainRegionName, Uri login, Uri target) { this.regionManager = regionManager; this.eventAggregator = eventAggregator; this.mainRegionName = mainRegionName; this.login = login; this.target = target; } } 更新 : 请记住, IRegionManager和IEventAggregator是Prism UnityBootstrapper的已知类型,在我的情况下是容器包装器。 我必须重新注册吗? 我想保持类型注册尽可能简单。 这会被视为坏习惯吗? 有更好的选择吗?

简单的注入器从命名空间注册所有服务

我的服务接口具有Services.Interfaces的命名空间 Service Interfaces的实现具有Web.UI.Services的命名空间 例如,我有2个服务实现 需要注册到UserService的IUserService ICountryService需要注册到CountryService 这就是我目前使用SimpleInjector注册这些服务的方法。 container.Register (); container.Register (); 问题:如果我有超过100个服务夸大了一点。 我需要为每项服务添加一行。 如何使用Simple Injector将所有实现从一个程序集注册到所有接口形成另一个程序集?

Ninject和DataContext处理

我正在使用Ninject从内核中检索我的DataContext,我想知道Ninject是否自动处理DataContext,或者他如何处理dispose()行为。 根据自己的经验,我知道处理datacontext非常重要,每当你创建DataContext的直接对象时(如:new DataContext()),你应该使用using()块。 我的问题是:当我从内核检索我的DataContext时,我是否仍然必须使用using()块? 或者Ninject是否为我解决了这个问题?

Resolve ()是否按会话返回对象?

在Microsoft Unity IoC中,如果我调用Resolve() ,我可以保证返回的对象是在当前会话期间创建的对象吗? 例如,三个用户登录,并且假设在容器中创建的SomeType对象对每个用户具有不同的值。 对Resolve的调用是否会返回为当前用户创建的对象? 或者它会做一些愚蠢的事情,比如返回创建的最后一个? 由于一些环境问题,我自己也遇到了麻烦,我需要尽快检查一下,所以如果有人能回答这个问题,那将非常有帮助! 编辑 原谅我,我是Unity的新手,但根据我在这里阅读的内容 ,似乎我应该能够在容器中注册具有唯一名称的对象,并通过该名称检索它们。 那么,我不能使用会话ID或会话中持续存在的其他值来检索我的对象吗?