我有一个界面,我使用StructureMap
来依赖注入。
public interface IFileStorageService
{
void SaveFile(string fileName, byte[] data);
}
界面不关心数据保存的位置。无论是记忆,文件,网络资源,太空卫星......
所以,我有两个实现这个接口的类; test class
和network file storage class
: -
public class TestFileStorageService : IFileStorageService
{ ... etc ...}
public class NetworkFileStorageService : IFileStorageService
{
public string NetworkUnc { get; set; }
public void SaveFile(...);
}
注意我的NetworkFileStorageService
有财产吗?该类需要在其中实现SaveFile方法的值。
好吧,我不确定如何定义该属性。
我认为我可以在我定义依赖关系的地方进行硬编码(例如,在我的引导程序方法中 - &gt; ForRequestedType<IFileStorageService>
...等)但是踢球者是......业务逻辑 DEFINES 位置。这不是一成不变的。
最后,因为我在逻辑中使用接口,所以此属性不可用。
有人可以帮忙吗?
如果可以,想要保存两个文件的图像
喝彩!
答案 0 :(得分:0)
如果只有这个实现需要这个,那么将它放在你的构造函数中呢?
答案 1 :(得分:0)
结构图假定所有构造函数参数都是必需的,属性是可选的。
使用structuremap有几种方法可以解决这个问题。 您可以创建像这样的工厂方法
x.ForRequestedType<Func<string, IFileStorageService>>()
.TheDefault.Is.ConstructedBy(
() =>
NetworkUnc =>
{
var args = new StructureMap.Pipeline.ExplicitArguments();
args.SetArg("NetworkUnc", NetworkUnc );
return StructureMap.ObjectFactory.GetInstance<IFileStorageService>(args);
});
现在您可以使用
创建对象StructureMap.ObjectFactory
.GetInstance<Func<string, IFileStorageService>>()("something");
但那不是那么漂亮。 或者为这个类创建一个配置类。
public class NetworkFileStorageServiceConfig
{
public string NetworkUnc { get; set; }
}
并配置它
x.ForRequestedType<NetworkFileStorageServiceConfig>().TheDefault.Is.IsThis(
new NetworkFileStorageServiceConfig { NetworkUnc = "something" });
我确信还有很多其他方法可以做到。