我想为所有类型或类注册一个通用的委托工厂:有什么办法吗?这里有一个解决方案,一次只注册一个typeclass......不是很好,还有其他方法吗?
public class Foo<T>
{
public string Name { get; set; }
public T Value;
}
public class FooBuilder<T>
{
public Foo<T> Build(string name)
{
return new Foo<T> { Name = name };
}
}
public delegate Foo<T> FooFactory<T>(string name);
public static void TestFoo()
{
var builder = new ContainerBuilder();
builder.RegisterType<FooBuilder<double>>();
builder.Register<FooFactory<double>>(c => c.Resolve<FooBuilder<double>>().Build);
IContainer container = builder.Build();
var foo1 = container.Resolve<FooFactory<double>>()("foo1");
}
你可以注册 "开放的通用 "作为提供服务。对于你的例子。
var builder = new ContainerBuilder();
// This registers an open generic that can provide all FooBuilder<T>.
builder.RegisterGeneric(typeof(FooBuilder<>));
var container = builder.Build();
// Resolve the builder directly...
var fooBuilder = container.Resolve<FooBuilder<double>>();
// ...or get a factory method if that's what you need
var fooBuilderFactory = container.Resolve<Func<FoodBuilder<double>>>();