在创建Object时注入属性

时间:2010-10-26 10:19:19

标签: c# ninject

我有一个LoggedTextWriter,我想将其注入到LinqToSql DataContext类的Log属性中。

我的自定义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 个答案:

答案 0 :(得分:1)

喜欢这个!使用ToMethod绑定,上下文(x下面)传递给你的lambda。您可以使用它来查找内核并查找您的日志。这与AutoFac和Funq的工作方式非常相似。此外,transient是默认范围,因此如果您愿意,可以将其从绑定中删除。

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