Structuremap and generic types

不羁岁月 提交于 2019-12-22 08:12:44

问题


I have a situation which seems a bit different from others I've seen. For clarrification, this isn't the normal question eg; something like IAClass maps to AClass etc - that involves using basically a single concrete classes per interface.

This involves having a single generic class, but I want to be able to load ALL possible usages of it.

Eg - the main class is of

public class MyClass<TDomainObject> : IMyClass<TDomainObject> 
     where TDomainObject : DomainObject

So example usages would be

IMyClass<Person> p = new MyClass<Person>;
IMyClass<Employer> p = new MyClass<Employer>;

I.e. for all DomainObjects I would like to be able to load a MyClass<> for. So you can see I don't use a specific class for each declaration, they all use the same one.

How would I get this loaded into StructureMap?


回答1:


That's actually the more straightforward use of generics.

For(typeof(IMyClass<>)).Use(typeof(MyClass<>))

If you are using an older version of Structuremap, substitute the more verbose ForRequestType and TheDefaultIsConcreteType.




回答2:


After some searching, I found out that you can use the auto register feature on Structuremap 2.5+ with generics over conventions, just like you could do with non-generics.

Just create your container like:

return new Container(x =>
        {
            x.Scan(y =>
            {
                y.TheCallingAssembly();
                y.AddAllTypesOf(typeof(IMyClass<>));
                y.WithDefaultConventions();
            });
        });


来源:https://stackoverflow.com/questions/2644941/structuremap-and-generic-types

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!