gpt4 book ai didi

c# - IRegistrationConvention 结构图 CtorDependency

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

我需要在扫描仪的 Ctor 中发送自定义实例。听到是我的代码:

public class RunnableScanner : IRegistrationConvention
{
private readonly List<Module> modules;
public RunnableScanner()
{
var config = RegisterModulesConfig.GetConfig();
modules = config.Modules.ToList();
}

public void Process(Type type, Registry registry)
{
if (!type.IsAbstract && typeof(IRunnable).IsAssignableFrom(type))
{
var module = modules.SingleOrDefault(c => c.Name == type.Name);
if (module != null)
{
registry.For(typeof (IRunnable)).Use(type).Named(type.Name).CtorDependency<Scheduler>("scheduler")
.IsNamedInstance(module.Scheduler + "Scheduler");
}
}
}
}

行:

registry.For(typeof (IRunnable)).Use(type).Named(type.Name).CtorDependency<Scheduler>("scheduler")             .IsNamedInstance(module.Scheduler + "Scheduler");

我需要为调度程序(“间隔”属性)设置一个值。

我试过这个:

var sch = ObjectFactory.GetNamedInstance<Scheduler>(module.Scheduler + "Scheduler");
sch.Interval = module.Interval;
registry.For(typeof (IRunnable)).Use(type).Named(type.Name).CtorDependency<Scheduler>("scheduler").Is(sch);

但这不起作用,因为我无法在注册表中使用 ObjectFactory。

对不起我的英语。

最佳答案

我不是结构图专家,所以这可能不是最好/最优雅/有效的解决方案。

但是使用 LambdaInstance 的以下注册似乎有效

registry.For(typeof (IRunnable)).Use(type).Named(type.Name)
.CtorDependency<Scheduler>("scheduler")
.Is(new LambdaInstance<Scheduler>(c =>
{
var sch = c.GetInstance<Scheduler>(module.Scheduler + "Scheduler");
sch.Interval = module.Interval;
return sch;
})
);

关于c# - IRegistrationConvention 结构图 CtorDependency,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15734222/

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