diff --git a/GettingStarted.md b/GettingStarted.md new file mode 100644 index 0000000..f980cda --- /dev/null +++ b/GettingStarted.md @@ -0,0 +1,21 @@ +# Getting Started with Cobble + +## Create an Application from Scratch + +1. Reference Cobble from your application + * This can be done through [NuGet](https://www.nuget.org/packages/ProjectCeilidh.Cobble/), or by downloading the binaries direct from the [GitHub releases](https://github.com/Ceilidh-Team/Cobble/releases) page. +2. Create a `CobbleContext` object in your main method +3. Register your implementations using `CobbleContext.AddManaged`. + * Implementations are classes with a single public constructor. Cobble will attempt to fill in the parameters with every matching implementation already registered in that `CobbleContext`. + * Constructor parameters can either be scalar values or `IEnumerable<>`s. Scalar values will be populated with a single instance that can be cast to that type, and `IEnumerable<>`s will be populated with every instance that can be cast to the generic argument. +4. Call `CobbleContext.Execute` + * This will construct the dependency graph and construct all your instances, satisfying dependencies where requested. +5. Optional: Use `CobbleContext.TryGetSingleton` and `CobbleContext.TryGetImplementations` to access the constructed instances after execution. + +## Advanced Usage + +* If any class you register with the system implements `ILateInject<>` at least once, the constructed instance will be notified whenever any new classes are registered with the owner `CobbleContext` after `CobbleContext.Execute` is called. + * This allows for, in certain conditions, plugins to be loaded without requiring an application restart. +* `CobbleContext.AddManaged` can accept any implementation of `IInstanceGenerator`, not just existing types. This can allow for object construction that does not use a type constructor. + * See the [reference implementations](ProjectCeilidh.Cobble/Generator) of `IInstanceGenerator` for examples on how to implement this interface. +* Creating a `CobbleContext` automatically registers itself with the dependency injection system, allowing you to depend on it and access it later on. diff --git a/LICENSE b/LICENSE index c782a09..ad4130e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,29 +1,21 @@ -BSD 3-Clause License +MIT License -Copyright (c) 2018, Project Ceilidh -All rights reserved. +Copyright (c) 2018 Olivia Trewin -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/ProjectCeilidh.Cobble/ProjectCeilidh.Cobble.csproj b/ProjectCeilidh.Cobble/ProjectCeilidh.Cobble.csproj index 40d1345..5b89abc 100644 --- a/ProjectCeilidh.Cobble/ProjectCeilidh.Cobble.csproj +++ b/ProjectCeilidh.Cobble/ProjectCeilidh.Cobble.csproj @@ -5,9 +5,13 @@ Olivia Trewin Project Ceilidh Cobble + Cobble A .NET Standard framework for creating extremely extensible applications. https://raw.githubusercontent.com/Ceilidh-Team/Cobble/master/LICENSE https://github.com/Ceilidh-Team/Cobble + https://github.com/Ceilidh-Team/Cobble.git + 2018 Olivia Trewin + true diff --git a/README.md b/README.md index 53859ab..2bbd1df 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # Cobble -A .NET Standard framework for creating extremely extensible applications. +[![NuGet](https://img.shields.io/nuget/v/ProjectCeilidh.Cobble.svg)](https://www.nuget.org/packages/ProjectCeilidh.Cobble/) -Cobble makes it easy to create applications using lightweight, customizable dependency injection. \ No newline at end of file +Cobble is a [.NET Standard](https://docs.microsoft.com/en-us/dotnet/standard/net-standard) library for building extensible applications through bespoke dependency injection. + +* Cross-platform: Because it uses .NET Standard, Cobble will work with any modern implementation of .NET. +* Lightweight: Cobble uses high-performance algorithms to execute quickly, and any overhead is only incurred one time. +* Learn Once, Write Anywhere: Cobble makes no assumptions about the function of your program or the technology you use, making it easy to use for any task. + +[Learn how to get started with Cobble](GettingStarted.md)