gpt4 book ai didi

c# - CaSTLe.Windsor IoC-容器特定配置

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:44 25 4
gpt4 key购买 nike

我选择 CaSTLe.Windsor 作为我的应用程序的 IoC 容器。这是我的第一个 IoC 经验,所以我需要配置它的建议。

应用的根类是Scheduler .它计划并执行不同种类的“工作”。每个作业执行 IWorker接口(interface),所以我决定注入(inject)一个 List<IWorker>进入Scheduler .以后会有很多种“工作”,现在有两个:CleanerWriter . Scheduler需要 Cleaner 的单个实例, 所以默认的单例生活方式是可以的。但我还需要注入(inject) Writer 的数量。 s 取决于某个文件夹中 XML 文件的数量。在我的案例中实现此目标的最佳模式是什么?

配置容器:

var container = new WindsorContainer();
// For IList injecting
container.Kernel.Resolver.AddSubResolver(new ListResolver(container.Kernel, true));
// Registering Scheduler
container.Register(CastleRegistration.Component.For<IScheduler>().ImplementedBy<Scheduler>);
// Registering Workers
container.Register(CastleRegistration.Component.For<IWorker>().ImplementedBy<Writer>());
container.Register(CastleRegistration.Component.For<IWorker>().ImplementedBy<Writer>());
// ... there are multiple Writers depends on XML files count
container.Register(CastleRegistration.Component.For<IWorker>().ImplementedBy<Cleaner>());
// Resolving
var sched = container.Resolve<IScheduler>();

调度器:

public class Scheduler : IScheduler
{
public IList<IWorker> Workers { get; set; }

public Scheduler(IList<IWorker> workers)
{
Workers = workers;
}
}

作者:

public class Writer : IWorker
{
public string Source { get; set; }

public Writer()
{
}

public Writer(string source)
{
Source = source;
}
}

清洁工:

public class Cleaner : IWorker
{
public Cleaner()
{
}
}

更新:我需要在每个 Parser 中传递一个参数对象(从 XML 反序列化)秒。我应该只使用 foreach 吗?在容器配置中循环?温莎的 Typed 工厂能帮上忙吗?我需要一些指南。

最佳答案

基本上你想做的是这些方面的事情:

public class WriterFactory : IWriterFactory
{
public Writer Create(string fileName)
{
return new Writer(fileName);
//if your writers have other dependencies then inject those into the factory via the constructor and use them here
}
}

然后注册这个工厂

container.Register(CastleRegistration.Component.For<IWriterFactory>().ImplementedBy<WriterFactory>());

然后在任何需要创建编写器的地方都依赖构造函数中的IWriterFactory

关于c# - CaSTLe.Windsor IoC-容器特定配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30186637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com