我有一个 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>();
这基本上是我想做的。 有时我需要创建一个新类,有时我已经有可用的类。 请问我将如何实现这一点?
我以为我可以使用动态参数,但我不确定如何。
提前谢谢你。
工厂模式将使解决方案变得优雅,但是,这为我的应用程序增加了很多复杂性,而所需要的只是一个非常简单的解决方案,该解决方案也可以正常工作。
在我自己身上传递一个整数比编写整个工厂来完成相同的工作要容易得多。
匿名类型传递给指定要使用的参数值的 Resolve
方法:
container.Resolve<IPerson>(new { id = 5 });
但是,如果在应用程序的不同点创建Person
实例,则不希望引用容器,因此应改用通过容器解析的PersonFactory
。看看类型化工厂设施。
这是我如何将参数传递给构造函数的示例(DI contiler 是统一的):
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
container.RegisterType<ILogger, FileLogger>(new InjectionConstructor(new[] { "c:\myLog.txt" }));
ILogger logger = container.Resolve<FileLogger>();
logger.Write("My message");
Console.ReadLine();
}
根据"有时我需要创建一个新类,有时我已经有可用的类。请问我将如何实现这一点?" - 尝试实现工厂模式