Mugen Injection [Метаданные]
Метаданные это информация о компоненте, которая хранится вместе с этим компонентом, она также доступна без необходимости создания экземпляра компонента. Когда вы регистрируете компонент, вы можете задать любые пользовательские настройки (метаданные), которые затем вы можете использовать, этот код показывает, как это работает:
// Create your MugenInjector. _injector = new MugenInjector(); _injector.Bind<Beta>().ToSelf().WithSetting("test", "test"); _injector.Get<Beta>();
WithSetting типа T
Иногда нам нужно, чтобы получить компонент с некоторыми настройками, чтобы получить метаданые из binding вы можете написать такой код:// Create your MugenInjector. _injector = new MugenInjector(); _injector.Bind<Beta>().ToSelf().WithSetting("test", "test"); var withSettings = _injector.Get<WithSettings<Beta>>(); //do something var o = withSettings.Settings["test"]; var value = withSettings.Value; public class Bravo { public Bravo(IEnumerable<WithSettings<Lazy<Beta>>> values) { var withSettings = values.First(lazy => lazy.Settings.ContainsKey("test")); } }
Пользовательская реализация WithSetting
Иногда мы не хотим подключать MugenInjection библиотеку в проект, в этом случае мы можете написать собственную реализацию WithSetting не зависящую от MugenInjection .Пример кода:
public class WithCustomSettings<T> { #region Constructors public WithCustomSettings(T value, IDictionary<string, object> settings, IDictionary<string, object> specialParameters) { Settings = settings; SpecialParameters = specialParameters; Value = value; } #endregion #region Properties public T Value { get; private set; } public IDictionary<string, object> Settings { get; private set; } public IDictionary<string, object> SpecialParameters { get; private set; } #endregion } // Create your MugenInjector. _injector = new MugenInjector(); //Register the WithCustomSettings<> type _injector.Components .BindingActivatorComponent .GetConverter<SettingsWrapperConverter>() .SettingsTypes .Add(typeof (WithCustomSettings<>)); _injector.Bind<IAlpha>().ToConstant(new Alpha()).WithSetting("test", "test"); //Getting service with custom setting wrapper. var alpha = _injector.Get<WithCustomSettings<IAlpha>>();
Автоматический вызов метода Dispose
Также когда вы регистрируете binding вы можете задать, чтобы после деактивации, binding попытался привести объект к интерфейсу IDisposable и вызвать метод Dispose.Пример кода:
// Create your MugenInjector. _injector = new MugenInjector(); _injector.Bind<Beta>().ToSelf().TryDisposeObjects();