Внедрение свойства при создании объекта - PullRequest
4 голосов
/ 26 октября 2010

У меня есть LoggedTextWriter, который я бы хотел добавить в свойство Log класса LinqToSql DataContext.

Мой пользовательский LoggedTextWriter имеет конструктор, который принимает ICustomWriter, но я не знаю, как добавить его в свойство Log.

Bind<DataContext>()
                .ToSelf()
                .InTransientScope()
                .WithConstructorArgument("connection", @"Data Source=localhost\sqlexpress2008;Initial Catalog=MyDB;Integrated Security=True")
                .WithPropertyValue("ObjectTrackingEnabled", true)
                .WithPropertyValue("Log", **<HowDoIGetAnInstanceOfLoggedTextWriter>**);

Bind<LoggedTextWriter>().ToSelf().InTransientScope();

Bind<ICustomWriter>().To<MyCustomWriter>().InTransientScope();

1 Ответ

1 голос
/ 27 октября 2010

Вот так! Привязка с помощью ToMethod, контекст (x ниже) передается в вашу лямбду. Вы можете использовать его для поиска Ядра и поиска своего журнала. Это очень похоже на работу AutoFac и Funq. Кроме того, переходный режим является областью по умолчанию, поэтому вы можете удалить его из своих привязок, если хотите.

Bind<LoggedTextWriter>().ToSelf();

Bind<ICustomWriter>().To<MyCustomWriter>();

Bind<DataContext>().ToMethod(x => 
    new DataContext(@"Data Source=localhost\sqlexpress2008;Initial Catalog=MyDB;Integrated Security=True")
    {
        ObjectTrackingEnabled = true,
        Log = x.Kernel.Get<LoggedTextWriter>()
    });
...