- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以在 UnityContainer 中配置的另一种类型的构造函数中实例化在 UnityContainer 中配置的类型?使用我当前的解决方案,我得到了一个
ResolutionFailedException:
Resolution of the dependency failed, type = "Sample.IMyProcessor", name = "(none)".
Exception occurred while: while resolving.
Exception is: VerificationException - Operation could destabilize the runtime.
问题是我的第二个类 (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 配置的 Main 函数:
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");
}
}
我假设问题与传递给 MyProcessor 类的 Func 有关。还有另一种方法可以将 loaderFactory 传递给 MyProcessor 类吗?
谢谢!
最佳答案
问题是 Unity 自动工厂只支持 Func<T>
而不是任何其他 Func 泛型。
你可以在Unity中注册你想要的Func,然后它就会解析:
Func<SysConfig, IFileLoader> func = config => container.Resolve<IFileLoader>();
container.RegisterType<Func<SysConfig, IFileLoader>>(new InjectionFactory(c => func));
var processor = container.Resolve<IMyProcessor>();
还有一些其他解决方案,例如:Unity's automatic abstract factory
关于dependency-injection - 统一 IoC : "Operation could destabilize the runtime",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19595179/
我正在尝试纠正一个 Func,我可以用它来访问属性的 get 方法,但遇到了绊脚石。 下面的动态方法创建得很好,但是当它被调用时我得到以下错误。 VerificationException,操作可能会
在我的 App i 中调试时有这个异常:{"Operation could destabilize the runtime."} 在 foreach 循环中: foreach (var item in
我需要在运行时使用 TypeBuilder 创建一个类型。这种类型应该实现一个特定的接口(interface),以便可以在编译时统一处理这种动态类型的实例。 该接口(interface)应返回一个对象
运行 RDLC 时,我在报告框架内显示以下消息: Failed to load host assembly. Operation could destabilize the runtime. 有谁知道
是否可以在 UnityContainer 中配置的另一种类型的构造函数中实例化在 UnityContainer 中配置的类型?使用我当前的解决方案,我得到了一个 ResolutionFailedExc
System.Security.VerificationException: Operation could destabilize the runtime. at Connance.Communic
我创建了一个非常简单的函数来执行以下操作: public static object[] ToArray(int ID) { return new object[4];
我目前正在玩反射,我的短代码有问题: public class Test { public Test() { } public string Call() {
我目前正在玩反射,我的短代码有问题: public class Test { public Test() { } public string Call() {
在我的程序中,我手工制作了我的 LINQ 表达式(我正在将我自己的表达式树转换为 LINQ - 我们目前使用 EF,但这可能会改变,所以我通过使用我自己的表达式来验证应用程序的这一部分并编写一些将其转
Server Error in '/' Application. 什么是解决这个问题的好方法?我让调试单步执行 global.asax 中的所有内容,并且那里没有错误。 Operation could
我们最近升级了一个 web/mvc 应用程序以使用 StrucutreMap 3.0.4 现在,当尝试在“Line Level Timings, All Methods with Source”或更高
我最近尝试将一个由 SubSonic 2.2 生成 DAL 的 .net 2.0 项目升级到 Visual Studio 2010 下的 .NET 4.0。 项目转换没有错误,但现在我在尝试启动它时收
这段代码: namespace ConsoleApplication3 { class Program { static void Main(string[] args
考虑以下代码: protected override IEnumerable GetListInternal( IQueryModel2 queryModel) { /// Cause
我是一名优秀的程序员,十分优秀!