c#WCF[简单注入器]注入模式

c#WCF[简单注入器]注入模式,c#,wcf,dependency-injection,simple-injector,C#,Wcf,Dependency Injection,Simple Injector,我已经看到了很多关于如何做到这一点的例子,但由于我是DI的新手,我认为最好针对我的问题提出一个问题。再次,如果已经有人问过,我道歉 我们有一个C#WCF服务正在运行,但最近有人要求我实现一个DI框架以实现重用能力。环顾四周后,我选择了简单的注入器 因此,我的服务目前正在编译,我可以从浏览器查看WSDL 为了开始,我在Application_start函数的Global.asax文件中放置了初始化代码,用于设置容器。在此函数中,我有以下代码: var container = new Contain

我已经看到了很多关于如何做到这一点的例子,但由于我是DI的新手,我认为最好针对我的问题提出一个问题。再次,如果已经有人问过,我道歉

我们有一个C#WCF服务正在运行,但最近有人要求我实现一个DI框架以实现重用能力。环顾四周后,我选择了简单的注入器

因此,我的服务目前正在编译,我可以从浏览器查看WSDL

为了开始,我在Application_start函数的Global.asax文件中放置了初始化代码,用于设置容器。在此函数中,我有以下代码:

var container = new Container();
container.Options.DefaultScopedLifestyle = new WcfOperationLifestyle();
然后是我的注册:

container.Register<IPersonManager, PersonManager>();
etc....
这运行正确,并没有错误,我可以在上面的第一行中断点并逐步完成代码

我被告知应该使用不同的初始化代码位置,而不是使用global.asax文件不确定是否应更改此项。

当我查看PersonManager类的构造函数时,我传递的对象也实现了IPersonManager接口

我认为这是正确的做法。因此,只要对象实现IPersonManager接口,它就会被注入对此也不确定

反正

我有一个类,代码如下:

public static class AddressRepository
{
    public static void SetAddress(this IRepository<Address> AddressRepository)
    {
        throw new NotImplementedException();
    }
}
container.Register(typeof(IRepository<>), typeof(Address), Lifestyle.Scoped);
公共静态类地址存储库
{
公共静态void SetAddress(此IRepository AddressRepository)
{
抛出新的NotImplementedException();
}
}
我已尝试为此设置简单的喷油器初始化,如下所示:

public static class AddressRepository
{
    public static void SetAddress(this IRepository<Address> AddressRepository)
    {
        throw new NotImplementedException();
    }
}
container.Register(typeof(IRepository<>), typeof(Address), Lifestyle.Scoped);
container.Register(typeof(IRepository)、typeof(Address)、lifesture.Scoped);
这是行不通的。我猜是因为AddressRepository没有实现接口,但是方法实现了


是否可以将依赖项注入此方法,如果可以,如何完成。

DI容器无法帮助您将依赖项注入静态类。您应该自己在方法中传递依赖项;您不需要DI容器。感谢您的支持。此外,由于您的SetAddress方法是一个扩展方法,这意味着您应该已经有了对
IRepository
的引用,才能调用
SetAddress
。因此,您应该将
IRepository
注入包含对
SetAddress
调用的类的构造函数中。DI容器无法帮助您将依赖项注入静态类。您应该自己在方法中传递依赖项;您不需要DI容器。感谢您的支持。此外,由于您的SetAddress方法是一个扩展方法,这意味着您应该已经有了对
IRepository
的引用,才能调用
SetAddress
。因此,您应该将
IRepository
注入包含对
SetAddress
的调用的类的构造函数中。