У меня есть универсальный класс (GenericClass
), у которого есть зависимость в зависимости от универсального типа (IGenericDependency
). Эта зависимость также является общей.
public class GenericClass<T>
{
private readonly IGenericDependency;
}
Параметр типа неизвестен до времени выполнения.
Пока я сделал это:
Я ввожу Func.
public class GenericClass<T> : IGenericClass<T> where T:class , new()
{
private readonly IGenericDependency _genericDependency;
public GenericClass(Func<TypeIGenericDependency>> factory)
{
_genericDependency = factory(T);
}
}
И регистрационный код:
builder.RegisterGeneric(typeof (GenericClass<>)).As(typeof (IGenericClass<>));
builder.Register<Func<Type, IGetDataCollection>>(c =>
{
var context = c.Resolve<IComponentContext>();
return type =>
{
if(type.Name.EndsWith("Entity"))
{
return (IGenericDependency)
context.Resolve(typeof (GetEntityCollection<>)
.MakeGenericType(type));
}
if(type.Name.EndsWith("TypedList"))
{
return (IGenericDependency)
context.Resolve(typeof (GetTypedList<>)
.MakeGenericType(type));
}
throw new NotSupportedException("Not supported type");
};
});
Мне интересно, есть ли другой способ сделать это.