を介して注入されている依存関係がありFunc<Owned<OwnedDependency>>
ます。その依存関係の1つには、OwnedDependencyを構築する時点でのみ持つパラメーターが必要です。
public class OwnedDependency
{
public OwnedDependency(IDependency1 dependency)
{
}
}
public interface IDependency1
{
}
public class Dependency1 : IDependency1
{
public Dependency1(MyParameter parameter)
{
}
}
public class MyClass
{
private readonly Func<Owned<OwnedDependency>> m_ownedDependencyFactory;
public MyClass(Func<Owned<OwnedDependency>> ownedDependencyFactory)
{
m_ownedDependencyFactory = ownedDependencyFactory;
}
public void CreateOwnedDependency()
{
var parameter = new MyParameter(...);
// ** how to setup parameter with the container? **
using (var ownedDependency = m_ownedDependencyFactory())
{
}
}
}
MyParameterのインスタンスを設定するクリーンな方法を見つけることができません。
私が調査した1つのアプローチは、ILifetimeScopeをMyClassに挿入してから、次のようなことを行うことです。
var parameter = new MyParameter(...);
using (var newScope = m_lifetimeScope.BeginLifetimeScope())
{
newScope.Resolve<IDependency1>(new TypedParameter(typeof(MyParameter), parameter));
var ownedDependency = newScope.Resolve<OwnedDependency>();
// ...
}
しかし、コンテナは不必要に邪魔になりつつあります。理想的には、注入することでFunc<IDependency1, Owned<OwnedDependency>>
あり、コンテナーは、OwnedDependencyの依存関係だけでなく、必要な依存関係を満たすために渡されたパラメーターを喜んで使用します。