Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不依赖于特定逻辑的公共接口_C#_Design Patterns - Fatal编程技术网

C# 不依赖于特定逻辑的公共接口

C# 不依赖于特定逻辑的公共接口,c#,design-patterns,C#,Design Patterns,假设我有3个项目 常见的 网状物 果心 Web和Core都参考了通用的。这个想法是,公共项目包含Web和Core的公共接口 假设在这两个项目中,我都有一些映射,我希望有一个通用的接口。例如,在Web项目上,我想使用AutoMapper,在核心项目上,我想使用其他东西 对于AutoMapper,我需要接口 using AutoMapper; namespace Common.Mapper { public interface IMapperConfigura

假设我有3个项目

常见的 网状物 果心 Web和Core都参考了通用的。这个想法是,公共项目包含Web和Core的公共接口

假设在这两个项目中,我都有一些映射,我希望有一个通用的接口。例如,在Web项目上,我想使用AutoMapper,在核心项目上,我想使用其他东西

对于AutoMapper,我需要接口

    using AutoMapper;
    namespace Common.Mapper
    {
        public interface IMapperConfiguration
        {
            IMapper GetMapper();
        }
    }
这在Web项目中起作用,但我无法将此接口移动到公共项目,因为此接口依赖于AutoMapper,而IMapper来自AutoMapper

如何为此创建公共接口? 是否有一些设计模式,我可以使用

Mapper只是一个例子。我想知道如何解决这样的问题。
谢谢您的帮助。

您需要使您的界面变得通用。如果您没有使AutoMapper对两个项目都通用,则它无法返回IMapper的实现。请原谅,我没有使用automapper,但您可能会考虑将其包装到一个类中,实现您自己的IMapper接口,例如:

namespace Common.Mapper
{
    public interface IMapper
    {
        void Map(...args...);
    }
}

namespace Web.Mapper
{
    public class Mapper : Common.Mapper.IMapper
    {
        public void Map(...args...)
        {
            AutoMapper.Map(...args...);
        }
    }
}

namespace Core.Mapper
{
    public class Mapper : Common.Mapper.IMapper
    {
        public void Map(...args...)
        {
            SomeOtherMapper.Map(...args...);
        }
    }
}

您需要使您的界面变得通用。如果您没有使AutoMapper对两个项目都通用,则它无法返回IMapper的实现。请原谅,我没有使用automapper,但您可能会考虑将其包装到一个类中,实现您自己的IMapper接口,例如:

namespace Common.Mapper
{
    public interface IMapper
    {
        void Map(...args...);
    }
}

namespace Web.Mapper
{
    public class Mapper : Common.Mapper.IMapper
    {
        public void Map(...args...)
        {
            AutoMapper.Map(...args...);
        }
    }
}

namespace Core.Mapper
{
    public class Mapper : Common.Mapper.IMapper
    {
        public void Map(...args...)
        {
            SomeOtherMapper.Map(...args...);
        }
    }
}

听起来IMapperConfiguration不常见-有什么问题吗?映射是常见功能,我想为常见功能提供通用接口。听起来IMapperConfiguration不常见-有什么问题吗?映射是常见功能,我希望拥有通用功能的通用接口。值得一提的是,这是一个设计模式的示例。因此,基于此链接,我理解并纠正我的错误,从这个示例1-common.Mapper.IMapper是目标。2-Core.Mapper和Web.Mapper是适配器。3-自动映射器和其他映射器是适配的。我说得对吗?换句话说:我将“automper”和“SomeOtherMapper”改编为“Common.Mapper.IMapper”,为此我使用了适配器“Web.Mapper”和“Core.Mapper”。是的,您的Web和Core映射器是适配器/包装器,值得一提的是,这是设计模式的一个示例。因此,基于此链接,我理解并纠正我的错误本例中的-Common.Mapper.IMapper是目标。2-Core.Mapper和Web.Mapper是适配器。3-自动映射器和其他映射器是适配的。我说得对吗?换句话说:我将“automper”和“SomeOtherMapper”改编为“Common.Mapper.IMapper”,为此我使用适配器“Web.Mapper”和“Core.Mapper”。是的,您的Web和Core映射器是适配器/包装器