fluent-nhibernate icon indicating copy to clipboard operation
fluent-nhibernate copied to clipboard

In class AssemblyTypeSource, use of Assembly.GetTypes is breaking change

Open cbp123 opened this issue 13 years ago • 5 comments

In FluentNH 1.2 and prior the class AssemblyTypeSource implemented the ITypeSource.GetTypes method using Assembly.GetExportedTypes. The new implementation in FluentNH uses Assembly.GetTypes.

GetExportedTypes only requires dependent DLLs to be in the application bin directory when types from that DLL are exposed publicly, where GetTypes requires all dependent DLLs to be in the appication's bin directory, even if they are only used privately.

This change in behaviour can be annoying. I'm not sure if it was intended or if there is a work around.

cbp123 avatar Oct 29 '12 04:10 cbp123

I think the default behaviour should be GetExportedTypes. And if different behaviour is needed, may be Fluent should provide one or two shortcuts (like GetTypes mentioned above). Any thoughts?

chester89 avatar Oct 29 '12 10:10 chester89

Yes I think .GetTypes would be unusual. Perhaps an overload to the FluentMappings.AddFromAssemblyOf<T>() methods would have been better, e.g. FluentMappings.AddFromAssemblyOf<Foo>(getNonPublicTypes: true)

cbp123 avatar Oct 29 '12 13:10 cbp123

If I'm not too busy this week, I'll do it

chester89 avatar Oct 29 '12 14:10 chester89

The change to use GetTypes was deliberate. One of the most common beginner mistakes was making their mappings private, and them not being picked up by FNH.

There's also a set of users don't like making their mappings public, and therefore exposing them as part of the assembly's external API; so GetExportedTypes wouldn't pick up those mappings, while GetTypes does.

Happy for there to be an overload/switch somewhere though. I'm undecided on the default though, as the reason for this still stands (users not making their mapping public).

On Tue, Oct 30, 2012 at 1:19 AM, Gleb Chermennov [email protected]:

If I'm not too busy this week, I'll do it

— Reply to this email directly or view it on GitHubhttps://github.com/jagregory/fluent-nhibernate/issues/185#issuecomment-9868323.

James Gregory

Tel: +61 (0) 411 619 513 Website: http://jagregory.com Twitter: @jagregory http://twitter.com/jagregory

jagregory avatar Oct 29 '12 22:10 jagregory

I see. In that case, I think that adding a line in docs will do for now

chester89 avatar Oct 30 '12 06:10 chester89