Structuremap将相同的属性实例注入到集合中

时间:2018-01-16 11:24:16

标签: c# structuremap

我正在尝试填充从IFoo继承的对象数组。我面临的问题是结构图使用IBar的相同实例填充AlwaysUnique()内的属性。我无法将IBar添加到Bar,因为这会在我们的企业应用程序的其他位置使用,并会产生后果。

无论如何,我是否可以为集合中的每个Foo创建public interface IFoo { IBar bar { get; set; } } public class Foo1 : IFoo { public IBar bar { get; set; } public Foo1(IBar bar) { this.bar = bar; } } public class Foo2 : IFoo { public IBar bar { get; set; } public Foo2(IBar bar) { this.bar = bar; } } public interface IBar { Guid id { get; set; } } public class Bar : IBar { public Guid id { get; set; } public Bar() {this.id = Guid.NewGuid();} } class Program { static void Main(string[] args) { var container = new Container(_ => { _.Scan(x => { x.TheCallingAssembly(); x.AddAllTypesOf<IFoo>(); }); _.For<IBar>().Use<Bar>(); //I can't change this line because Bar is used elsewhere in the project }); var foos = container.GetAllInstances<IFoo>(); if (foos.ElementAt(0).bar == foos.ElementAt(1).bar) throw new Exception("Bar must be a different instance"); } } 对象的新实例?

select
  replace
  (
    replace
    (
      replace
      (
        replace
        (
          'ABÇDÉFGHÍJÁBÇDÉFGHÍJ', 'Á', 'A'
        ), 'Ç', 'C'
      ), 'É', 'E'
    ), 'Í', 'I'
  ) as clean_keyword;

1 个答案:

答案 0 :(得分:1)

您可以使用自定义策略执行此操作。参见示例3 here,您可以根据需要进行调整。

类似的东西:

public class BarUniqueForFoo : IInstancePolicy
{
    public void Apply(Type pluginType, Instance instance)
    {
        if (pluginType == typeof(IBar) && instance.ReturnedType == typeof(Bar)
        {
            instance.SetLifecycleTo<UniquePerRequestLifecycle>();
        }
    }
}