nhibernate / fluent-nhibernate

Fluent NHibernate!
BSD 3-Clause "New" or "Revised" License
1.66k stars 686 forks source link

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

Open cbp123 opened 12 years ago

cbp123 commented 12 years ago

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.

chester89 commented 12 years ago

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?

cbp123 commented 12 years ago

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

chester89 commented 12 years ago

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

jagregory commented 12 years ago

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 notifications@github.comwrote:

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

chester89 commented 12 years ago

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