Perhaps you could export some sort of configuration part along with your transporter part.
Let's say your host application defines an interface:
public interface IDataTransporterSettings
{
// any common settings are defined here
}
... and assumes that any IDataTrasporter has a public property of that type:
public interface IDataTransporter
{
IDataTransporterSettings Settings { get; }
}
... then your "settings" could be a class with a bunch of public properties matching each of the settings:
public class TcpDataTransporterSettings : IDataTransporterSettings
{
public string Address { get; set; }
public int Port { get; set; }
}
Your TcpDataTransporter class, then, would always read from its Settings property to determine its address/port/whatever.
Now your host application could use reflection to inspect the settings on each of its imported transporter parts and display an appropriate control for each public settable property (a TextBox for strings, a NumericUpDown for ints etc).
I guess with a bit of work you could add human-readable descriptions to each property via Attributes, so you could define the label for each control in the UI.
I haven't fully thought this through, and I certainly haven't implemented it anywhere, but it sounds like it could be a way to provide flexible settings for each imported part.