CInject - Quick Guide to get started with building your injectors
If you don't know what is CInject, I would recommend you to read this article and get the download latest version of CInject from CodePlex website.
Creating a Basic Injector
Once you have the latest executable, you can follow through these steps to create your own injector
Create a new Visual Studio Class Library Project (C# or VB.NET) and add a Reference to CInject.Injections.dll. You will find this assembly with the CInject application
Add a class called 'MyInjector' that derives from ICInject interface. This interface is part of CInject.Injections reference
The MyInjector class would look like
using CInject.Injections.Interfaces; namespace InjectorLib { public class MyInjector : ICInject { public void OnComplete() { // This is called before exit of injected method } public void OnInvoke(CInject.Injections.Library.CInjection injection) { // Called at the entry of injected method // To get the arguments passed to injected method var arguments = injection.Arguments; // To get value of property Text in any argument var propertyValues = injection.GetPropertyValue("Text"); } public void Dispose() { // dispose here if you want to } } }
Compile the Visual Studio Project to create a DLL named MyInjector.dll and follow the steps mentioned in Using Injectors in CInject
Adding Configuration to your Injector
Adding configuration to an injector is similar to adding a configuration to any other project. You can choose from one of the following ways
- Rely on the configuration to be added in the configuration (app.config / web.config) of the target assembly / executable
- Add an independent configuration file (say, myconfig.xml) that needs to be copied in the target assembly/executable folder
- Add an independent configuration file and retrieve it from a Network Shared drive
I would not recommend Point -1 as it may cause conflicting configurations. To use step 2, you can use a very handy feature of CInject
Let's say that your configuration file is myinjector-configuration.xml and it is added to the Visual Studio Project
You need to change the property of the configuration file to 'Copy Always' and decorate your injector class with DependentFiles attribute
using CInject.Injections.Attributes; using CInject.Injections.Interfaces; namespace InjectorLib { [DependentFiles("myinjector-configuration.xml")] public class MyInjector : ICInject { #region Code // Other code here #endregion } }
When CInject applies this injector to any assembly, it ensures that it copies myinjector-configuration.xml to root folder of target assembly / executable.
You can access this configuration file in code using standard .NET libraries
What if I some dependent / referenced assemblies as well?
Dependent / Referenced assemblies in your injector work same as configuration files.
You just have to mention them in the DependentFiles attribute and ensure that they are in the same directory as that of the injector.