Вы можете использовать инструкцию Ctor, чтобы сообщить SM, какие объекты использовать для параметров Ctor.
var myFile = new FileInfo(...);
For<InterfaceA>.Use<A>().Ctor<FileInfo>().Is(myFile);
Подробнее об аргументах Ctor здесь .
Редактировать: В случае, если имя файла неизвестно до выполнения метода Do в B, вы должны отложить создание объекта A до выполнения метода do.Для этого вы можете использовать фабрику, либо с ручным кодированием, либо с Func / Lazy.
Для подхода с Func вы можете изменить свой B, чтобы он брал Func of A в качестве зависимости ctor:
public class B : InterfaceB
{
private readonly Func<string, InterfaceA> _aBuilder;
public B(Func<string, InterfaceA> aBuilder)
{
_aBuilder = aBuilder;
}
public void Do()
{
InterfaceA anA = _aBuilder("fileName");
anA.DoSomething();
}
}
Загрузите ремень, используя:
ObjectFactory.Initialize(
c=>
{
c.For<InterfaceA>().Use<A>();
c.For<Func<string, InterfaceA>>().Use(d =>
new Func<string, InterfaceA>( s =>
ObjectFactory.With(new FileInfo(s)).GetInstance<InterfaceA>()));
c.For<InterfaceB>().Use<B>();
}
);