我有很多类,如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){}
}
对于需要它的所有类,分隔符是相同的。我如何最好地注入这种依赖?
我应该注入工厂类吗?这似乎比我想要的更复杂!
答案 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
,但我不需要一个!