Tag: ioc container

如何使用Autofac与方法连接事件?

是否可以通过接口/类(通过构造函数和属性注入)将事件连接到具有Autofac的方法而不是整个对象。 我想绑定在function级别而不是类型级别。 以编程方式我希望完成以下工作(在C#中): someType.Output += someOtherType.Input; 例如,Spring.net支持以下构造来实现: Autofac能够做到这一点以及如何做到这一点? 是否可以将xml配置用于此类任务?

温莎城堡奇怪的行为与财产注入和工厂方法

我在ASP.NET MVC项目中使用Castle Windsor 2.5.1并使用属性注入来创建一个我期望在基本控制器类上始终可用的对象。 我正在使用工厂来创建这个对象,但是如果构造函数中有错误,我根本不会收到来自Windsor的警告,它只返回我的对象​​但没有注入属性。 这是预期的行为,如果是这样,当工厂无法返回任何内容时,如何引发错误? 这是一个例子 public class MyDependency : IMyDependency { public MyDependency(bool error) { if (error) throw new Exception(“I error on creation”); } } public interface IMyDependency { } public class MyConsumer { public IMyDependency MyDependency { get; set; } } [TestFixture] public class ProgramTest { [Test] public void CreateWithoutError() //Works as […]

在unit testing中使用DI容器

我们一直在使用Simple Injector取得了很好的成功,在一个相当实际的应用程序中。 我们一直在为所有生产类使用构造函数注入,并配置Simple Injector来填充所有内容,而且一切都很好。 但是,我们没有使用Simple Injector来管理unit testing的依赖树。 相反,我们一直在手动创新。 我花了几天时间完成了一次重大的重构,几乎所有的时间都是在我们的unit testing中修复这些手动构造的依赖树。 这让我感到疑惑 – 有没有人有任何模式用于配置他们在unit testing中使用的依赖树? 对我们来说,至少在我们的测试中,我们的依赖树往往相当简单,但有很多。 任何人都有他们用来管理这些的方法吗?

Castle Windsor:从一个程序集中自动注册类型,从而实现另一个程序集的接口

我使用Castle Windsor作为我的IoC容器 。 我有一个具有类似于以下结构的应用程序: MyApp.Services.dll IEmployeeService IContractHoursService … MyApp.ServicesImpl.dll EmployeeService : MyApp.Services.IEmployeeService ContractHoursService : MyApp.Services.IContractHoursService … 我目前使用XML配置 ,每次添加新的IService / Service对时,我都必须在XML配置文件中添加一个新组件。 我想将所有这些切换到流畅的注册API,但还没有找到正确的配方来做我想要的。 有人可以帮忙吗? 生活方式都是singleton 。 提前谢谢了。

可能的GetObjectsOfType替换

我有这小段代码 var idObjects = Spring.Context.Support.ContextRegistry.GetContext() .GetObjectsOfType(typeof (ICustomInterfaceThatDoesSomething)); foreach (ICustomInterfaceThatDoesSomething icitds in idObjects.Values) icitds.DoSomething(); 有没有办法可以避免这种情况,让spring.net自动将单例注入我声明的属性,就像一个ICustomInterfaceThatDoesSomething数组? 我想要这样的事情的唯一原因是因为我想杀死项目的.dll依赖项,这是单一的使用点。

在Unity中有TryResolve吗?

如果Resolve失败,如何让Unity不要抛出ResolutionFailedException ? 有没有类似TryResolve东西? var container = new UnityContainer(); var foo = container.TryResolve(); Assert.IsNull(foo);

IoC(Ninject)和工厂

如果我有以下代码: public class RobotNavigationService : IRobotNavigationService { public RobotNavigationService(IRobotFactory robotFactory) { //… } } public class RobotFactory : IRobotFactory { public IRobot Create(string nameOfRobot) { if (name == “Maximilian”) { return new KillerRobot(); } else { return new StandardRobot(); } } } 我的问题是在这里做反转控制的正确方法是什么? 我不想将KillerRobot和StandardRobot混凝土添加到Factory类吗? 而且我不想通过IoC.Get 带来它们吗? 那个服务地点不是真的IoC对吗? 有没有更好的方法来解决在运行时切换混凝土的问题?

如何在ServiceStack.net中使用Funq注册多个IDbConnectionFactory实例

您将如何在Funq中注册不同的IDbConnectionFactory实例,然后直接在您的服务中访问它们? 命名实例在某种程度上发挥作用? 这是跨服务使用不同数据库时最好的方法吗? 谢谢! 编辑: 一个例子 ;)。 我可能会离开这里因为我对IoC很新,但是比如说我有2个独立的数据库连接,我想注入。 在ServiceStack中,这是在Global.asax中完成的。 container.Register(c => new OrmLiteConnectionFactory(@”Connection String 1″, SqlServerOrmLiteDialectProvider.Instance)); container.Register(c => new OrmLiteConnectionFactory(@”Connection String 2″, SqlServerOrmLiteDialectProvider.Instance)); 这两个似乎都注入了骄傲的海鲂。 然后通过以下方式在服务端自动访问它们: public IDbConnectionFactory DbFactory { get; set; } 在这种情况下,它似乎给了我第一个注册的。 如何在服务端访问特定的访问权限? 希望这会让它更加清晰。 这是ServiceStack.Examples中一个完整的示例,仅使用1个IDbConnectionFactory: Movies Rest

编写您自己的IOC容器

有人在C#写过自己的IOC容器吗? 或者绝大多数人使用各种框架,如Spring。 每个人的专业和意见是什么?

Castle Windsor – 开放通用接口的IoC注册?

Castle Windsor是否允许注册开放的通用接口,还是需要单独注册每个可能的类型实例? 示例 – 下面的类型为T,Z在编译时失败,除非我单独指定强类型的T,Z。 container.Register(Component .For<IAdapterFactory>() .ImplementedBy<AdapterFactory>() .LifeStyle.PerWebRequest);