2

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

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。

对不起我的英语不好。

4

1 回答 1

1

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

但是以下使用 a 的注册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;
          })
    );
于 2013-03-31T21:05:33.970 回答