Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
69 views
in Technique[技术] by (71.8m points)

c# - How to resolve generic type with dynamic parameter?

I have a generic class like

class EntityDao<T> where T: class
{
    void Update(T entity)
    {
       //Update entity to somewhere.
    }
}

while T might be any classes, like User, Company and etc.

I use Autofac to register EntityDao as Generic Type.

var builder = new ContainerBuilder();
builder.RegisterGeneric(typeof(EntityDao<>));
var container = builder.Build();

In other places, I want to resove it dynamically.

string typeName = "User"; // might be "Company" or any other type name.

switch (typeName)
{
    case "User":
        container.Resolve<EntityDao<User>>().Update(entity);
        break;
    case "Company":
        container.Resolve<EntityDao<Company>>().Update(entity);
        break;
    default:
        break;
}

Here, typeName might have more than 50 values, and I thing there should be a generic way to avoid writing 50 cases.

question from:https://stackoverflow.com/questions/65878471/how-to-resolve-generic-type-with-dynamic-parameter

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
  1. You cannot have partially opened classes. You can see this question.

  2. But you can pass a parameter to a register.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...