I have two assemblies A & B.
A has existing reference to B and it must be kept that way. Right now I made some changes to B that need to refer to A. So circular reference occurs.
Bit of details:
A has a few property grids that the dialog in B needs to be hosted. So to avoid this circular reference issue I tried to define interfaces to grids in third assembly to which A & B both refer, and make B only refers to the interfaces.
Two issues I'm facing:
there’s too much custom data types (properties to be specific) inside the grids which are defined inside A and I have to define interfaces for every one of them.
I see example of this works with function parameter e.g. call target function through the interface passed in. But how would it fit considering the following code - I can't new a ICustomPropertyGridWrapper...
object = new CustomPropertyGridWrapper(...)
m_property.SelectedObject = object;
This is a problem with the language design of C#. In C/C++ you would just use a header to define the interface of the compilation unit and the dependency is resolved.
In C# there are no headers. You have three options
Number 3 is typically how these situations are handled in C# but its not as elegant as C/C++ solution to this problem. For large code bases you have to design from the start with this in mind.
Sounds like you are attempting death by interface. Not everything has to be exposed by interface.
A simple answer is to either merge the assemblies, or move the common controls and data types to a third assembly. You only need to interface things if you want a consistent contractual way to access or work with things, and you want to hide the actual implementation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With