c# - IRegistrationConvention 结构图 CtorDependency

标签 c# dependency-injection structuremap

我需要在扫描仪的 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/

相关文章:

c# - 具有依赖注入(inject)的 UserControl 无法创建组件

java - 如何在构造函数接受类的情况下使用 Guice `Module` 进行注入(inject)?

asp.net-mvc - StructureMap/NHibernate Session Per Request 包括常量事务

SignalR 结构图依赖解析器(为 Microsoft.AspNet.SignalR.Messaging.IMessageBus 指定)

java - 使用依赖注入(inject) w/guice 的可浏览源项目?

dependency-injection - 具有多个装饰器的装饰器模式和结构图

c# - 转让所有权时如何摆脱 CA2000 警告?

c# - 如何更改DataGrid中超链接的字体颜色

c# - 在 C# 中,我应该按值传递参数并返回相同的变量,还是按引用传递?

c# - 与 Microsoft.VisualStudio.TestTools.UnitTesting 命名空间相关的错误