GithubHelp home page GithubHelp logo

startnine / start9-api Goto Github PK

View Code? Open in Web Editor NEW
10.0 10.0 3.0 501 KB

Making Windows and Start9 interaction simple and easy

Home Page: https://startnine.github.io/

License: MIT License

C# 100.00%
api start9

start9-api's People

Contributors

logonoff avatar reflectronic avatar splitwirez avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

start9-api's Issues

Why are people copying all of the pipeline-related projects into their solutions

As described by this MSDN article,

Typically, organizations that develop host applications will also develop an SDK that describes the object model for add-in developers to program against. This SDK will include the add-in view assembly that contains the abstract base class or interface that the add-in must implement, as well as abstract base classes and interfaces that represent the types that are passed between the host and the add-in. this work can also include building the complete pipeline.

So why are we setting the example of copying everything into the solution, customizing the namespaces, setting the build paths, etc.? It's time consuming (for people that can't use our e:b:ic template that would eventually exist, that is), prone to (human) error, and gives module developers an obligation to understand MAF, which is a huge rabbit hole that 99% of module developers are better off not understanding (the only reason I could see it being useful is if you want to change the views and adapters, which is a really geeky thing to want to do anyway). We should just follow that MSDN article and publish a nuget package people can reference and do whatever with

Changes to configuration

  • Force all IConfigurationContract implementers to be INotifyPropertyChanged (it might be a bit of a hassle to get the pipeline generator to work with INPC itself so we might just add an event instead)
  • Remove IConfigurationContract.Entries; we will use reflection to accomplish the same purpose
  • Remove IHostContract.SaveConfiguration(IModuleContract) since config will be saved when the PropertyChanged event is raised
  • Add IListContract<IConfigurationEntry> IHostContract.GetConfigurationEntries(IConfiguration)- This will transform the reflected-over properties/fields on the object into a collection of IConfigurationEntry and fill in extra properties on each entry with information obtained by attributes placed on the reflected-over properties/fields like DisplayAttribute, DescriptionAttribute, and CategoryAttribute (actual attributes we will use will be decided later).
  • Add aforementioned metadata properties to, not only IConfigurationEntry, but other contract entries as well.

Add `IReceiverContract.MessageObjectType`

This will correspond to the already existing IMessageContract.MessageObjectType. This way we can have upfront validation to confirm if the node connection will work

Do we actually need IMessageContract.Text?

IMessageContract.Text was included to allow developers to provide additional information attached to the object of the message. However, in hindsight, the practical uses of such a property are limited - if you need to send text, you can always make the object of the message a string - and it'll only further slow down the pipeline. Do we really need to include it in the contract?

Create `IModuleAssemblyContract` to represent a module's assembly

The only contract that currently represents a module, which is also the add-in contract, only represents an individual instance of a module and its functionality. A contract that represents an actual module assembly, its intances, and its properties needs to be added to the assembly. Something similar to Start9.Host.Module's functionality

Add `INativeHandleContract IModuleContract.ShowConfigurator()`

Modules can (preferably) return a FrameworkElement from this method that we will display inline in the host application, or null. If modules return null, they are expected to use their own mechanism to display their own configuration - for example, navigating to a new page inside their module's UI.

On a side note, this could raise dangerous stability concerns for us - modules normally shouldn't be able to bring down the host application, but running add-in code in the host process could end up doing that. We'll have to investigate preventative measures.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.