gpt4 book ai didi

c# - 如何使用 ServiceStack Funq IoC 解析类型

转载 作者:行者123 更新时间:2023-12-01 19:40:54 39 4
gpt4 key购买 nike

我正在尝试为 HangFire 编写一个 JobActivator使用ServiceStack IoC 和我在解析类型时遇到问题。我确信对于具有更多泛型经验的人来说,这将是一个简单的答案。

我传入的容器来自 HostContext.Container

using Hangfire;
using System;
using System.Collections.Generic;
using System.Linq;
using ServiceStack;

namespace Common.Hangfire
{

public class FunqJobActivator : JobActivator
{

private Funq.Container _container;

public FunqJobActivator(Funq.Container container)
{
if (container == null)
{
throw new ArgumentNullException("container");
}
_container = container;
}

public override object ActivateJob(Type type)
{
return _container.Resolve<type>(); //** this doesn't compile
}
}
}

最佳答案

虽然 Funq 是具有通用 API 的类型化 IOC,但您可以添加辅助扩展方法来启用使用运行时类型解析实例,例如:

public static class ContainerExtensions
{
public static object TryResolve(this Container container, Type type)
{
var mi = typeof(Container).GetMethods(BindingFlags.Public | BindingFlags.Instance)
.First(x => x.Name == "TryResolve" &&
x.GetGenericArguments().Length == 1 &&
x.GetParameters().Length == 0);

var genericMi = mi.MakeGenericMethod(type);
var instance = genericMi.Invoke(container, new object[0]);
return instance;
}
}

这将允许您使用运行时类型解析已注册的依赖项,例如:

var container = new Container();
container.Register(c => new Foo());

var instance = container.TryResolve(typeof(Foo));

关于c# - 如何使用 ServiceStack Funq IoC 解析类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774352/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com