开发者

Unity Framework

开发者 https://www.devze.com 2022-12-10 09:44 出处:网络
Let me clear with my Question, I have say 100 classes all these 100 classes implements 1 interface say IDependency, say suppose my classname is Customer it implements IDependency

Let me clear with my Question, I have say 100 classes all these 100 classes implements 1 interface say IDependency, say suppose my classname is Customer it implements IDependency

public class Customer : IDependency
public class Order:IDependency 

it goes on till 100 classes

And I am registering this class in web.config like

<type type="IDependency" mapTo="Customer"></type>
<type type="IDependency" mapTo="Order"></type>

this will be wrong because i am getting error IDependency already declared

Now what i need is there should be only 1 line in web.config and i should be able to resolve all my classes and I don't want to RegisterType in my code like

Container.RegisterType<IDependency,Customer>();
Container.Register开发者_C百科Type<IDependency,Order>();

I don't want to write these lines in my code file the requirement is like that all should be done through config file.

Do you guys think is this valid if yes can you at least give me idea how to approach it.

Overall what i think is there should be 1 class say BaseClass which implement my IDependency Interface first and all my 100 classes will inherit that class and my config file should be like

<type type="IDependency" mapTo="BaseClass"></type>

Please let me know if you need more clarification on this because I am really struck with this


You can't register the same interface for two classes at the same time. In your code sample:

Container.RegisterType<IDependency,Customer>();
Container.RegisterType<IDependency,Order>();

what the Unity container will do is to register Order as the class to return when you invoke Resolve<IDependency>, and forget about the previous Customer class registration.

Anyway I don't quite understand which is your goal. If you could register multiple classes for the same interface, what would you expect to obtain when invoking Resolve<IDependency>, or what would you expect the classes having an IDependency parameter in the constructor to receive?

EDIT based on clarification from Dotnet Coder:

If all you want is to decide at runtime which class you want to register based on configuration, you can have one value in the configuration file (web.config, Settings, or the like) telling which class you want to associate. For example:

string className = Settings.Default["IDependencyClassName"]; //just an example, can use web.config or other config system as well
Container.RegisterType(typeof(IDependency), Type.GetType(className));
0

精彩评论

暂无评论...
验证码 换一张
取 消