About .NET, ASP.NET, MVC, C#, WPF, WCF and everything related to .NET and more.

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();

Комментарии
Оставить комментарий
*bold*
_italics_
+underline+
* Bullet List
** Bullet List 2
# Number List
## Number List 2
{"Do not apply formatting"}
{code:language} code here {code:language}.
Supports: aspx c#, c#, c++, html, sql, xml
[url:http://www.example.com]