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