如何使用interface作为对象类

时间:2017-03-13 13:38:19

标签: c# dependency-injection interface orchardcms autofac

我想使用interface作为对象类。就像你在某些CMS中看到的那样,如Orchard。例如,您可以使用IContentManager接口,就像对内容执行许多操作的对象一样。甚至使用接口作为ViewModel(第一个具有优先权)。 我用Autofac做了一些像

这样的事情
public class BLL_DependencySetup : Autofac.Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterType<RoleService>().As<IRoleService>();
        builder.RegisterType<RoleMV>().As<IRole>().InstancePerDependency();
        base.Load(builder);
    }
}

但实际上它并不像我想要的那样。

public class ISRelatedContentsDriver : ContentPartDriver<ISRelatedContentsPart>
{
    private readonly IContentManager _contentManager;

    public ISRelatedContentsDriver(IContentManager contentManager)
    {
        _contentManager = contentManager;
    }

我想做一些你在上面看到的事情。它与IoC有什么关系吗? 编辑:我只是想知道它是如何工作的。并在我自己的架构中使用它。不在果园里。

2 个答案:

答案 0 :(得分:1)

您的类或接口需要从IDependency继承。 然后你可以像在Orchard中的任何其他服务一样注入它。

例如:

public interface MyInterface : IDependency
{
   void DoSomething();
}

public MyClass : MyInteface
{
   public void DoSomething()
   {
      // work
   }
}

public class ISRelatedContentsDriver : ContentPartDriver<ISRelatedContentsPart>
{
    private readonly IContentManager _contentManager;
    private readonly IMyInterface _myInterface;

    public ISRelatedContentsDriver(IContentManager contentManager, IMyInterface myInterface)
    {
        _contentManager = contentManager;
        _myInterface = myInterface;
    }
}

答案 1 :(得分:0)

您正在寻找的术语是依赖注入,是的,它与IoC有关。您需要一个IoC容器(AutofacWindsorUnity等)来注册您的接口和实现。然后,您就可以像上面那样使用您的服务了。

我建议您浏览一下IoT容器的教程,或者再次考虑一下您是否要构建新的架构。