# Interfaces as messages Events can be created on the fly from interfaces without first defining an explicit class implementing the interfaces. This technique can be used to support multiple inheritance for [polymorphic routing scenarios](dynamic-dispatch-and-routing.md). In general, it is recommended to use [dedicated, simple types](/nservicebus/messaging/messages-events-commands.md) as messages instead. ## Sending interface messages Interface messages can be sent using the following syntax: ```cs await messageSession.Send(message => { message.SomeProperty = "Hello world"; }); ``` Replies are supported via: ```cs return context.Reply(message => { message.SomeProperty = "Hello world"; }); ``` ## Publishing interface messages Interface messages can be published using the following syntax: ```cs return context.Publish(message => { message.SomeProperty = "Hello world"; }); ``` ## Creating interface messages with IMessageCreator If an interface message is needed before calling `Send` or `Publish`, use `IMessageCreator` directly to create the message instance: ```cs //IMessageCreator is available via dependency injection async Task PublishEvent(IMessageCreator messageCreator) { var eventMessage = messageCreator.CreateInstance(message => { message.SomeProperty = "Hello world"; }); await messageSession.Publish(eventMessage); //or if on a message handler await context.Publish(eventMessage); } ```