是否可以在UnityContainer中配置的另一種類型的構造函數中實例化一個在UnityContainer中配置的類型?以我目前的解決方案,我得到一個Unity IoC:「操作可能會破壞運行時的穩定性」
ResolutionFailedException:
分辨率依賴的失敗,TYPE = 「Sample.IMyProcessor」,名字= 「(無)」。
發生異常時:解析時。
例外情況是:VerificationException - 操作可能會破壞運行時的穩定性。
的問題是,我的第二類(FileLoader)具有應在第一個構造函數進行評估的參數:
的MyProcessor類的構造:
public class MyProcessor : IMyProcessor
{
private readonly IFileLoader loader;
private readonly IRepository repository;
public MyProcessor(IRepository repository, string environment, Func<SysConfig, IFileLoader> loaderFactory)
{
this.repository = repository;
SysConfig config = repository.GetConfig(environment);
loader = loaderFactory(config);
}
public void DoWork()
{
loader.Process();
}
}
這裏的主要功能與UnityContainer配置:
public static void Run()
{
var unityContainer = new UnityContainer()
.RegisterType<IRepository, MyRepository>()
.RegisterType<IFileLoader, FileLoader>()
.RegisterType<IMyProcessor, MyProcessor>(new InjectionConstructor(typeof(IRepository), "DEV", typeof(Func<SysConfig, IFileLoader>)));
//Tests
var x = unityContainer.Resolve<IRepository>(); //--> OK
var y = unityContainer.Resolve<IFileLoader>(); //--> OK
var processor = unityContainer.Resolve<IMyProcessor>();
//--> ResolutionFailedException: "Operation could destabilize the runtime."
processor.DoWork();
}
而且FileLoader類:
public class FileLoader : IFileLoader
{
private readonly SysConfig sysConfig;
public FileLoader(SysConfig sysConfig, IRepository repository)
{
this.sysConfig = sysConfig;
}
public void Process()
{
//some sample implementation
if (sysConfig.IsProduction)
Console.WriteLine("Production Environement");
else
Console.WriteLine("Test Environment");
}
}
我認爲問題是關係到Func鍵被傳遞到MyProcessor類。是否有另一種方法將loaderFactory傳遞給MyProcessor類?
謝謝!
哇,作品!向你致敬! –