Tag: ioc container

使用IoC动态选择接口实现

我有一种情况,在运行时确定接口的实现。 例如,我检查一个字符串,然后确定要使用哪个子类,如果没有IoC,它看起来如下所示: if (fruitStr == “Apple”) { new AppleImpl().SomeMethod(); } else { new BananaImpl().SomeMethod(); } AppleImpl BananaImpl说, AppleImpl和BananaImpl这两个类都是同一个界面的IFruit 。 如何使用IoC / Dependency Injection来完成,特别是在Castle Windsor ?

Autofac运行时参数

我是autofac的新手,希望看到将运行时值传递给构造函数的最佳实践。 我已经阅读了一堆stackoverflow问题,但是没有一个完全充实。 我们应该使用代表,工厂来创建服务等。我知道传递容器并不是实现这一目标的最佳方法。 在我的特定情况下,我有一个访问多个依赖项的服务,比如日志记录,数据提供者等。除了传递的少量服务之外,我还需要捕获运行时参数,比如userid,password。 SomeService需要用户标识和密码,并在Web查看器执行特定操作时查找。 以下是我的问题,并强调了问题。 public class SomeService : ISomeService { private readonly IDataProvider _dataProvider; private readonly ILog _log; private readonly string _username; private readonly string _password; public SomeService(IDataProvider dataProvider, ILog log, string username, string password) { _dataProvider = dataProvider; _log = log; _username = username; _password = password; } } 数据提供者和日志在autofac中配置 builder.RegisterType().As() builder.RegisterType().As() […]

需要帮助了解Ninject如何将Nhibernate SessionFactory实例添加到UnitOfWork中?

因此,使用教程中的一些帮助,我已经设法使用Ninject将Nhibernate会话连接到我的存储库和我的存储库到我的控制器。 然而,有一个设置,我没有理解Ninject正在做的“自动化”,并希望有人可以解释。 下面是我的Ninject ModuleRepository ,它inheritance自NinjectModule,它执行所有绑定。 public class ModuleRepository : NinjectModule { public override void Load() { var helper = new NHibernateHelper(ConfigurationManager.ConnectionStrings[Environment.MachineName].ConnectionString); Bind().ToConstant(helper.SessionFactory) .InSingletonScope(); Bind().To() .InRequestScope(); Bind().ToProvider() .InRequestScope(); Bind<IRepository>().To(); Bind<IRepository>().To(); } } 这是UnitOfWork类 : public class UnitOfWork : IUnitOfWork { private readonly ISessionFactory _sessionFactory; private readonly ITransaction _transaction; public ISession Session { get; private set; } […]

Autofac:隐藏一个复合材料背后的多个逆变实现

我被这个关于(.NET 4.0)协方差和逆向支持Autofac的问题引发了,现在我正在努力实现类似的东西,但没有任何运气。 我想要实现的是以这样的方式配置Autofac:当我解析单个具体的IEventHandler (为了使用container.Resolve进行演示,但通常使用构造函数注入),Autofac将返回一个MultipleDispatchEventHandler包装所有可从请求的处理程序分配的已注册事件处理程序。 换句话说,当我写这个: var handler = container .GetInstance<IEventHandler>(); handler.Handle(new CustomerMovedEvent()); 关于应用程序设计(如下所示),我希望返回一个包装CustomerMovedEventHandler和NotifyStaffWhenCustomerMovedEventHandler的MultipleDispatchEventHandler 。 这是应用程序设计: // Events: public class CustomerMovedEvent { } public class CustomerMovedAbroadEvent : CustomerMovedEvent { } public class SpecialCustomerMovedEvent : CustomerMovedEvent { } // Event handler definition (note the ‘in’ keyword): public interface IEventHandler { void Handle(TEvent e); } // Event handler […]

哪个是测试Ninject绑定的好方法?

我们在所有项目中使用ninject,正如您所知,有时候很难测试内核是否能够在执行时解析每个类型,因为有时控件会在绑定和自动绑定的大小时丢失(通过ninject扩展) ) 高。 所以,我在这里要问的是,如何在加载所有模块和绑定后,我的内核能够解析每种类型? 你做过任何unit testing吗? 或者您只是在执行时对应用程序进行接受测试? 任何建议都会很棒:)

Unity的自定义对象工厂扩展

我正在使用Unity IoC容器,我需要拦截对Resolve的任何调用以获取某个基本接口,并运行我自己的自定义代码来构造这些类型。 换句话说,在下面的示例代码中,当我调用container.Resolve() ,如果它没有具体实现类型的实例,则调用MyFactoryFunction来构造一个,否则我希望它返回缓存副本。 标准Unity容器无法构造这些对象( 更新:因为它们是.NET远程处理对象,因此本地计算机上的任何程序集中都不存在具体类),我不想在前面创建它们使用RegisterInstance存储它们。 interface IFoo : IBase { … } interface IFoo2 : IBase { … } … container.Resolve(); … IBase MyFactoryFunction(Type t) { … } 我假设我可以创建一个Unity扩展来执行此操作,但我想知道是否已经有一个解决方案我可以借用。

城堡温莎拦截方法从class级内召唤

我们在Castle Windsor容器中注册了组件,就像这样 void RegisterComponent() { var component = Component.For().ImplementedBy(); component.Interceptors(); container.Register(component); } 然而,我们遇到的问题是,当我们从类中进行方法调用时,它不会被截获。 例如,我们有类似的组件 ServiceA : IService { public void MethodA1() { // do some stuff } public void MethodA2() { MethodA1(); } } 如果我们从其他类中调用MethodA2或MethodA1方法,则会截获它,但是当从MethodA2调用时, MethodA1显然不会被截获,因为调用来自类中。 我们发现类似的情况,解决方案Castle Dynamic Proxy在从类中调用时不拦截方法调用但是该解决方案使用new运算符来创建组件和代理,这在我们的情况下不适合,因为我们使用容器。 我们可以像上面那样使用此解决方案进行组件注册 还是有其他方法来解决这个问题?

Simple Injector是否支持MVC 4 ASP.NET Web API?

我是Simple Injector IOC容器的新手。 我将开始在一个项目中工作,该项目需要使用MVC 4 ASP.NET Web API的多租户ASP.NET MVC实现。 我的问题是:Simple inject支持MVC 4 ASP.NET Web API吗? 阅读这样的简单注入器文档会引用MVC 3,我想知道MVC 4是否也受支持。

Autofac:批量注册开放generics类型

我得到了一个具有许多实现IHandler具体类型的程序集,如下所示: public class MoveCustomerHandler : IHandler { void IHandler.Handle(MoveCustomerCommand c) { // some business logic for moving a customer. } } 目前,我正按照以下方式逐一注册: builder.RegisterType() .As<IHandler>(); builder.RegisterType() .As<IHandler>(); builder.RegisterType() .As<IHandler>(); // Many handler registrations here… 使用构造函数注入注入命令处理程序,如下所示: public class OrderController { private readonly IHandler handler; public OrderController(IHandler handler) { this.handler = handler; } } 有没有办法使用Autofac以简单的方式批量注册我的所有处理程序?

我可以像在Autofac中那样在Unity中的模块中注册我的类型吗?

我对Autofac非常熟悉,我非常喜欢Autofac的一个function是注册模块。 有谁知道我怎么能用Unity做到这一点? 如果有的话,我很难找到在Google中使用哪些术语来提出等效的统一。 public class Global : HttpApplication, IContainerProviderAccessor { private static IContainerProvider _containerProvider; protected void Application_Start(object sender, EventArgs e) { var builder = new ContainerBuilder(); builder.RegisterModule(new MyWebModule()); _containerProvider = new ContainerProvider(builder.Build()); } […] public IContainerProvider ContainerProvider { get { return _containerProvider; } } } public class MyWebModule: Module { protected override void Load(ContainerBuilder builder) […]