城堡温莎传递参数

Cra*_*aig 2 c# castle-windsor

我有一个DI容器,我想通过DI容器将参数传递给构造函数.

public interface IPerson { }

public class Person : IPerson {
    private int _personId;

    Person() { _personId = 0; }
    Person(int id) { _personId = id; }
}
...
Container.Register(Component.For<IPerson>().ImplementedBy<Person>().Lifestyle.Transient);
...
//Person is already available
Container.Resolve<Person>(55);

//Person is not available
Container.Resolve<Person>();
Run Code Online (Sandbox Code Playgroud)

这基本上就是我想要做的.有时我需要创建一个新类,有时我已经有了可用的类.我该如何做到这一点?

我以为我可以使用动态参数,但我不知道如何.

先感谢您.


工厂模式会使解决方案变得优雅,但是,当我需要的只是一个非常简单的解决方案时,这会给我的应用程序增加一些复杂性.

在我自己中传递一个整数比编写整个工厂来完成同样的工作要容易得多.

dev*_*tal 7

您可以将匿名类型传递给Resolve指定要使用的参数值的方法:

container.Resolve<IPerson>(new { id = 5 });
Run Code Online (Sandbox Code Playgroud)

但是,如果您Person在应用程序中的各个点创建实例,那么您不希望引用容器,因此您应该使用PersonFactory通过容器解析的替代容器.看看Typed Factory Facility.