У меня есть общий класс (GenericClass
), который имеет зависимость в зависимости от общего типа (IGenericDependency
). Эта зависимость также является общей.Устранение зависимости в зависимости от типа общего типа - Autofac
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);
}
}
И код reistration:
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");
};
});
мне интересно, если есть другой способ сделать это.
Ничего себе, я знал, что должен быть какой-то аккуратнее решение :-) Это экономит много кода. Должен быть как пример в вики. – user137348