首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS unity容器

MS unity容器
EN

Stack Overflow用户
提问于 2016-01-12 00:03:24
回答 1查看 80关注 0票数 1

我有一个接口IInterface,它看起来像下面这样-

代码语言:javascript
复制
public interface IInterface             
{      
  void SomeMethod1();      
  void SomeMethod2();  
  void SomeMethod3();   
  .                    
  .                    
  .                     
}       

其中一个实现类似于-

代码语言:javascript
复制
public class Implementation : IInterface         
{     
  private Object obj;
  public Implementation(Object obj)      
  {        
       this.obj = obj;
      // Do Something           
  }        

  public void SomeMethod1()    
  {    
     lock(obj)
     {
        // Do Something   
     }     
  }    

  public void SomeMethod2()    
  {    
     // Do Something   
  } 

  public void SomeMethod3()    
  {    
     lock(obj)
     {
        // Do Something   
     }      
  } 
  .                            
  .                            
  .                                    
}     

通过unity配置注册IInterface类型的实现类时,如何传递Object类型的静态只读实例?

EN

回答 1

Stack Overflow用户

发布于 2016-01-12 18:33:00

我更喜欢的方法可能是创建一个工厂来创建IInterface

代码语言:javascript
复制
public interface IInterface
{
  void SomeMethod1(); 
}

public interface IInterfaceFactory
{
    IInterface CreateInterface();
}

public class StandardInterfaceFactory : IInterfaceFactory
{
    // Define your static lock object here. Other customers 
    // can define their own IInterfaceFactory to use a 
    // different lock object.
    private static readonly object lockObject = new object();

    public IInterface CreateInterface()
    {
        return new StandardInterface(lockObject);
    }
}

public class StandardInterface : IInterface
{
    private readonly object lockObject;

    public StandardInterface(object lockObject)
    {
        this.lockObject = lockObject;
    }

    public void SomeMethod1()
    {
        lock (this.lockObject)
        {
            Console.WriteLine("I've locked on " + lockObject);
        }
    }
}

您的unity配置和客户端代码将如下所示。

代码语言:javascript
复制
void Main()
{
    IUnityContainer container = new UnityContainer();

    // This mapping can be done trivially in XML configuration.
    // Left as an exercise for the reader :)
    container.RegisterType<IInterfaceFactory, StandardInterfaceFactory>();

    IInterfaceFactory factory = container.Resolve<IInterfaceFactory>();

    IInterface myInterface = factory.CreateInterface();

    myInterface.SomeMethod1();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34725958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档