如何将一个字符串注入我的类中

时间:2016-03-03 15:42:05

标签: c# dependency-injection unity-container

我有很多类,如public class GetA:IGetA{} public class GetB:IGetB{}等等,所有这些都在特定的命名空间中

我用一串代码注册它们

  container.RegisterTypes(
            AllClasses.FromLoadedAssemblies().Where(
                t => t.Namespace == "Getters"),
            WithMappings.FromMatchingInterface,
            WithName.Default,
            WithLifetime.ContainerControlled);

这非常有效。

我现在必须向其中一些人介绍对某个字符串的依赖。

public class GetA:IGetA
{
   public GetA(string separator){}
}

对于需要它的所有类,分隔符是相同的。我如何最好地注入这种依赖?

我应该注入工厂类吗?这似乎比我想要的更复杂!

1 个答案:

答案 0 :(得分:0)

这可能是一个恐怖场景,但这就是我所做的......

我的getter类取决于Func<string>

public class GetA : IGetA
{   
   private readonly string separator;

   public GetA(Func<string> separator){
     this.separator = separator();
    }
}

然后在我的UnityConfig.cs中放了

        container.RegisterType<Func<string>>(
            new InjectionFactory(f => new Func<string>(() => "The separator... really it comes from a database call though")
                ));

在我的测试中我能做到 new GetA (() => ", ");这可能看起来有点时髦,但让我与数据库调用分开以获取分隔符。

我对此并不满意,好像我想在其他地方Func<string>然后我会踩到我的脚趾。也许我需要一个IGetSeperatorFactory,但我不需要一个!